2013-04-30 69 views
39

我正在嘗試在GitHub上查看非主分支的拉取請求。目標分支在master後面,並且pull請求顯示來自master的提交,所以我合併master並將其推送到GitHub,但提交和差異仍然在刷新後出現在pull請求中。我翻了一番,檢查GitHub上的分支是否有來自主人的提交。爲什麼他們仍然出現在拉請求中?顯示已經在目標分支中的提交的GitHub拉取請求

我也檢出了拉本地請求,它只顯示未合併的提交。

回答

43

它看起來像拉取請求並沒有跟蹤目標分支的變化(我聯繫了GitHub支持,並於2014年11月18日收到回覆,指出這是設計)。

但是,你可以得到它向你展示通過執行以下操作更新的變化:

http://githuburl/org/repo/compare/targetbranch...currentbranch 

根據需要更換githuburlorgrepotargetbranchcurrentbranch

或者作爲hexsprite在他的回答中指出,你也可以通過在PR上點擊編輯並暫時將基礎改爲另一個分支並再次更新來迫使它更新。這會產生警告:

您確定要更換底座嗎?

來自舊基本分支的某些提交可能會從 時間表中刪除,而舊評論評論可能會過時。

而在PR將leave two log entries

enter image description here

+2

是的,我聯繫了支持一會兒,得到了同樣的迴應。他們不會針對這種情況進行優化。這有點令人沮喪。我們解決這個問題的方法就是重新設定和強制推動,或者關閉拉力並創建一個新的拉力。 – lobati 2014-11-18 15:54:14

+1

此答案不解決問題,但只是允許用戶看到真正的差異。 – FearlessFuture 2016-06-28 03:14:47

+2

問題是「爲什麼他們仍然出現在拉請求?」。它回答了這個問題。 – 2016-06-28 03:21:18

6

爲別人來跨越這一點,並通過GitHub的困惑拉請求行爲,根本原因是,PR是源科的DIFF提示源分支和目標分支的共同祖先。因此,它將顯示源分支上的所有更改直至共同祖先,並且不會考慮目標分支上可能發生的任何更改。

的更多信息可在這裏:https://developer.atlassian.com/blog/2015/01/a-better-pull-request/

共同的祖先基於diff文件似乎危險。我希望GitHub可以選擇製作更標準的3路合併公關。

+0

你提到的原因似乎是正確的,但我很困惑,因爲一般情況下,每當主人得到更新,我反饋合併更改到我的分支... ** git checkout my-branch - > git merge master **。 拉取請求會立即刷新。共同的祖先是否也得到更新? – 2016-12-30 15:23:24

+0

這種行爲似乎發生在做rebase而不是合併 – 2016-12-30 15:28:10

12

解決此問題的一種方法是在該PR中的git rebase targetbranch。然後git push --force targetbranch,那麼Github會顯示正確的提交和差異。如果你不知道你在做什麼,請小心。也許先結賬測試分支,然後git diff targetbranch以確保它仍然是你想要的。

0

我不完全確定這背後的理論。但我得到了這幾次,並能夠通過以下操作來解決這個問題。

git pull --rebase 

這將取回併合並從原來的回購主分支的變化(如果你點到)

然後你用力按壓你改變你的github克隆庫(目標)

git push -f origin master 

這將確保您的github克隆和您的父回購處於相同的github提交級別,並且您不會在分支機構中看到任何不必要的更改。

5

您需要添加以下到您的~/.gitconfig文件:

[rebase] 
    autosquash = true 

這將自動取得一致,那麼this answer節目。

我從here得到了這個。

+2

該死的,我點擊了意外的投票。這個答案幫助了我。請讓我改變它。 – hosein 2017-09-23 10:20:06

+0

@hosein去吧。你現在應該可以做到。 – 2018-01-16 15:52:54

+1

我認爲這應該是接受的答案,或者包含在接受的答案中。這實現了我期待的結果! – 2018-02-23 15:10:54

5

總結一下,GitHub不會在提取請求中自動重定義提交歷史記錄。最簡單的解決方案是:

解決方案1:調整基線

假設你想從feature-01合併爲master

git fetch origin 
git checkout feature-01 
git rebase origin/master 
git push --force 

如果您在叉子上工作,那麼你可能需要將上述更換originupstream。請參閱How do I update a GitHub forked repository?瞭解有關跟蹤原始存儲庫的遠程分支的更多信息。

解決方案2:創建一個新的拉動請求

假設你想從feature-01合併前奏master

git checkout feature-01 
git checkout -b feature-01-rebased 
git push -u origin feature-01-rebased 

現在打開一個拉請求feature-01-rebased並關閉一個feature-01

13

這是一個很好的解決方法。在GitHub中查看PR時,使用Edit按鈕將基本分支更改爲master以外的其他分支。然後將其切換回master,現在它只能正確顯示最近提交的更改。

相關問題