在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Linux/ Git 既落后(ahead)又超前 (behind)到底是怎么回事?

Git 既落后(ahead)又超前 (behind)到底是怎么回事?

使用 SourceTree 進(jìn)行合并變基后,有事就會出現(xiàn) 落后 N個版本,超前 N 個版本。

然后需要先 git pull ,才能繼續(xù)操作。 git pull的時候會經(jīng)常性的沖突。

一致不明白這個既落后又超前具體是怎么形成的,是什么意思。

希望大神指點(diǎn)!

回答
編輯回答
心夠野

你拉取代碼的時候線上版本為1,然后你本地commit了代碼,版本為2,但是線上版本已經(jīng)發(fā)展為3了,這個時候把線上代碼拉下來就出現(xiàn)了又落后,又超前的情況

2017年10月9日 01:29
編輯回答
只愛你

你本地commit了代碼,沒有push,就是超前。
remote上有更新,本地沒有pull,就是落后。

這不沖突,因為判斷主體不一樣。

2017年8月31日 04:39
編輯回答
別硬撐

很好解釋。假如現(xiàn)在有一個項目,master branch 有三個 commit,分別是 A,B,C:

A - B - C

你在這時候新建了一個 branch (tracking master branch),叫 myBranch,然后寫了代碼并提交,這時候你的 branch 是這樣:

A - B - C - X

在這期間,你的同事在 master 上也寫了代碼并提交,這時候 master 變成:

A - B - C - D

那么現(xiàn)在,你的 myBranch 就是既 behind 又 ahead 了。


順便,這時候如果你在 myBranch 上執(zhí)行 git rebase origin/master 命令,那么 myBranch 就會是:

A - B - C - D - X'

注意 X'X 的 "實(shí)際作用" 相同,但 hash 不同


如果你在 myBranch 上執(zhí)行 git pull origin master 命令,那么 myBranch 就會是:

A - B - C - X - E

其中,E 是一個 merge commit。也就是把當(dāng)前 master 的 HEAD 加到 myBranch


你還有一個選擇,就是 git cherry-pick D,那么你的 myBranch 就會是:

A - B - C - X - D'

注意 D'D 的 "實(shí)際作用" 相同,但 hash 不同..而且 D' 不是一個 merge commit。

2017年6月11日 13:22
編輯回答
不舍棄

我也用SourceTree ,個人認(rèn)為:這種情況是你的項目里有些文件跟遠(yuǎn)程分支不一致,例如項目里有A,B,C三個文件,你和你同事共同開發(fā),A文件你修改了,就是超前咯,當(dāng)B文件被人修改后再提交到遠(yuǎn)程分支,這樣就是你本地的B文件落后咯,C文件大家都沒改過,所以沒變動

2017年3月15日 08:41