簡體   English   中英

Git分支與大師分叉

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM