2016-12-14 35 views
1

當解決一個文件,我可以相應的Git結帳我們/他們的子模塊

git checkout --ours filename 

,然後提交的文件有衝突。這將解決衝突。但是,

git checkout --ours submodule 

似乎不工作。子模塊的引用提交不會更改。

解決子模塊引用中的衝突時,等效於git checkout --ours filename會怎樣?

+0

這可能與GIT 1.7.1的問題。在替代樹('-2','--ours'和'HEAD')中,只有'git checkout HEAD子模塊'做它應該做的事情。也許所有這三個都適用於更新版本的git。 – Amiramix

回答

1

Considering your next question,你可以嘗試的三個階段中的一個結帳你子模塊:

git checkout -1 -- submodule # common ancestor 
git checkout -2 -- submodule # source 
git checkout -3 -- submodule # destination or MERGE_HEAD 

一旦一個子模塊的gitlink已經改變,別忘了git submodule update,刷新其內容。

的OP Amiramix是指這個quora answer,其中Berk D. Demir,在Facebook的生產工程師,補充道:

git checkout -1 file 

...將從兩個分支的祖先簽的文件。
這既不是「我們的」也不是「他們的」。這是兩個分支分開之前的文件版本。非常方便。

如您所知,參數-2用於HEAD版本,-3版本相應地爲MERGE_HEAD

通過其他所有git命令到達這些文件的另一種方法是使用提交的符號引用。
git checkout MERGE_HEAD -- file--theirs-3的效果相同。

處理合並衝突時的另一個方便語法是冒號階段冒號前綴到路徑。 git show :3:file將顯示來自MERGE_HEAD的文件(不是差異)。

一個微小的小抄:

-1 == $(git merge-base HEAD MERGE_HEAD) 
-2 == --ours == HEAD 
-3 == --theirs == MERGE_HEAD 
+0

所以,'git checkout -2 - submodule'是否等同於我們的「git checkout -3 - submodule」等價於正常文件合併的「他們的」?此外,我只是合併,我不需要將子模塊檢出或更新爲特定的提交。我可以忽略'git submodule update'並提交合並的更改嗎? – Amiramix

+0

@Amiramix是對這兩個問題。 – VonC

+0

好的,謝謝,稍後會測試並接受它是否有效。 – Amiramix

相關問題