我是新來的混帳,所以請裸露在我身邊。正在使用`git checkout - 他們的<filename>'解決合併衝突的合法方式?
我從master
更新,並得到一個合併錯誤,我不應該修改文件(我必須這樣做是因爲意外)。
而不是試圖找出代碼中的合併問題,我可以告訴git使用'他們'的副本嗎?我可以只使用git checkout --theirs
而沒有任何後果嗎?
如果不是,那麼這樣做的正確方法是什麼?
我是新來的混帳,所以請裸露在我身邊。正在使用`git checkout - 他們的<filename>'解決合併衝突的合法方式?
我從master
更新,並得到一個合併錯誤,我不應該修改文件(我必須這樣做是因爲意外)。
而不是試圖找出代碼中的合併問題,我可以告訴git使用'他們'的副本嗎?我可以只使用git checkout --theirs
而沒有任何後果嗎?
如果不是,那麼這樣做的正確方法是什麼?
可以,其實git checkout --theirs -- path
更換工作樹版本的文件(名爲路徑)與他們的版本。 --
部分僅在path
類似於git checkout
選項時纔是必需的,例如,如果該文件被命名爲--ours
或--force
或者其他愚蠢的東西。 (這是很好的養成使用它,雖然,以防萬一的習慣。總有一天,你會絆倒名爲-rf
文件和-- -rf
習慣會阻止您運行rm -rf
... :-))
由於讓Git讓實現顯示通過,這不會標記文件已解決,但。您必須單獨將git add
標記爲已解決的路徑。這是因爲,當文件處於衝突狀態時,所有三個版本(基數爲--ours
和--theirs
)都存儲在該索引條目的三個「衝突版本」插槽中。要將文件標記爲已解決,您必須讓Git將這三個插槽打開並將文件寫入更常規的插槽零條目。這就是Git如何知道哪些文件已解析,哪些不是:通過這些特殊的較高編號的索引插槽。
奇怪的是,如果你git checkout MERGE_HEAD path
,那將標記爲已解決的文件。這是因爲此形式的git checkout
首先將指定的commit-MERGE_HEAD
中的文件複製到索引插槽零中,然後從那裏複製到工作樹。 「複製到插槽0」步驟可解決合併衝突。但需要注意的是,如果你更名爲文件時,path
你需要--theirs
和path
你需要MERGE_HEAD
會有所不同!
嗯,它會做它說的,但我建議你確保你不知道做的改變對'git diff master ... HEAD path/to/file'來說並不重要。如果衝突很短,將merge.conflictstyle設置爲diff3也會有所幫助。 – Ryan