[英]Git branch diverged from master
我有feature
分支,然后有主branch
。
上周,我在feature
分支上工作,然后在功能分支上,我昨天做了這個
git rebase master
。
另一個人aslo今天在master分支中提交了osme的東西。
所以今天我做到了
master# git pull
master# git rebase feature
現在我明白了
$ git status
On branch master
Your branch and 'origin/master' have diverged,
and have 18 and 11 different commits each, respectively.
(use "git pull" to merge the remote branch into yours)
nothing to commit, working directory clean
我該怎么辦。 我可以做git push -f
嘗試創建一些圖表來確切說明您所做的工作將非常有用,因此讓我們來看看。 假設您從遠程主機創建功能分支時,它只有3次提交。 這意味着兩個本地分支將開始如下所示:
A <- B <- C master
A <- B <- C feature
我們還假設在上周,您對本地功能分支進行了一些提交,而您團隊中的其他開發人員也對遠程主機進行了提交。 通過master# git pull
拉您的master分支后,您的兩個本地分支將如下所示:
A <- B <- C <- 1 <- 2 <- 3 master
A <- B <- C <- D <- E feature
這里,提交1、2和3來自其他開發人員,而提交D和E來自您。
接下來,如果您通過master# git rebase feature
在該功能上對master進行了本地重設,則兩個分支將如下所示:
A <- B <- C <- D <- E <- 1' <- 2' <- 3' master
A <- B <- C <- D <- E feature
現在,主提交1、2和3已變成1',2'和3',因為實際上是在您的master分支上重播功能后所做的不同提交。
最后,讓我們將本地master分支與遠程master進行比較:
A <- B <- C <- D <- E <- 1' <- 2' <- 3' local master
A <- B <- C <- 1 <- 2 <- 3 remote master
當您進行git status
呼叫時,Git告訴您您的本地主機已與遠程主機分離。 這意味着本地和遠程主節點共享一個共同的祖先提交,但在此之后,每個提交都有不同的提交。 這也意味着您無法快速轉發遠程主服務器。 此時,您唯一的選擇是通過git push -f
強制推送,或git merge
。 正如Oliver Charleworth指出的那樣,將本地分支強制到遠程通常是一個壞主意,因為它可以覆蓋使用master的其他開發人員所做的所有更改。 您剩下的選擇是將本地主機與遠程主機合並。
前進的更簡單(更簡潔)的方法是在功能分支中完成所有工作,然后在需要時將其合並到master中。 通常,您僅應在主控上建立基礎(或將功能合並到主控),而不是相反。
不,如果您按-f鍵,則將消除其他開發人員提交給母版的更改。
您有兩種選擇:
1)與主人合並。
git merge master
2)重新建立基礎
git rebase <sha1> onto --master
<sha1>
將是您分支出的master上的原始提交。
這些選項彼此非常不同,您需要完全了解它們的作用。 您需要做什么,完全取決於您的意圖,即前進。 如果您確切說明您要實現的目標,則可以提出一些進一步的建議。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.