2017-09-13 184 views
1

像大多數人一樣,我在多項目開發中使用git,許多開發人員和許多更改每天都會傳播到主要分支。很多時候,當我將一個父分支合併到一個功能(或錯誤修復)分支中時,我遇到了幾個我沒有碰到甚至看不到的文件的衝突!Git:如何使用「他們的」未修改的文件,其餘的正常合併?

背景

分公司設置:

git checkout master 
git checkout -b myFeatureBranch 

比方說,兩個或更多時間的流逝。我的功能代碼現在已準備好進行審查。注意:這裏只使用master來表示清楚,實際上它是另一個唯一命名的發佈分支。許多其他開發人員將他們的錯誤修復和功能分支合併到master(他們的代碼評論獲得批准後)。這些變化可能已影響我在我的功能分支中更改過的一個或多個文件。因此,我需要將master合併到我的分支以獲取所有最新的代碼。

我的問題

我沒有找到一個答案,這個具體的問題。我看着this question其中也指出to this question。有以下這些信息,如果我需要合併master到我的特性分支,然後按照這個邏輯,我會做:

git checkout myFeatureBranch 
git merge -X theirs master 

我相信(從man頁)認爲:

This option forces conflicting hunks to be auto-resolved cleanly by 
favoring `their` version. 

但這真的不是人們想要的嗎?

如果在我的分支中我沒有觸摸到該文件,那麼是的,這正是我想要的;但是,如果我修改了一個文件(並提交給我的分支),那麼我想要完成正常的合併(和衝突解決)過程。在這種情況下,我不想支持theirs。以上是否這樣做?如果沒有,是否有一個合併命令可以這樣做?

+0

對於衝突,兩個副本都不必編輯過,如果只有一個副本有共同祖先的變化,那麼不應該有衝突,那是你正在經歷什麼? – jrtapsell

+0

「我碰到了幾個文件,我沒有碰到甚至看到衝突」 - 這意味着無論如何都會觸及文件。如果文件實際上未被修改,它們不會發生衝突。 – max630

+0

[This answer](https://stackoverflow.com/a/18262173/2303202)應該有助於找出你不想改變的文件中的局部變化。 – max630

回答

0

在雙方都沒有修改的文件上不能有衝突。你可以在你的評論中堅持你所期望的那樣,但事實並非如此。

你試圖「證明」它發生的第一個說法是這些文件沒有顯示在git status;這隻意味着沒有任何未提交的文件更改。 真的應該做的是合併時有一個乾淨的工作樹,以便git status不會報告任何文件。

但合併衝突的問題不在於是否存在未提交的更改,例如status將報告它;這是自合併基地以來是否有變化。如果你想看看有什麼變化將文件從mastermy_branch提議的合併過程中要考慮,你可以做

git diff `git merge-base master my_branch` my_branch -- path/to/some/file 

現在的變化可能是一些由工具推出。在某些情況下,您可能會有行結束設置導致不需要的更改。隨你。一旦你知道它是什麼,你可以看看如何讓它停止發生。

但是說「如果我沒有更改文件,從theirs」更改的命令是git merge簡單和簡單。您不會在未修改的文件上發生衝突。

+0

我添加並提交了我已更改的文件。你說了什麼「git status」返回的結果與我的不同。我說衝突文件沒有顯示爲已修改。事實上,衝突文件不是我提交的任何部分,也不是他們或任何其他文件顯示在「git狀態」上。但是,在合併父母之後,我經常發生衝突。如果這種情況只發生一次或兩次,肯定會出現操作錯誤 - 我有好幾年的時間了,而不僅僅是我。我們是否設置錯誤 - 這可能是可能的 - 因此我原來的問題 – JoeG

+0

不知道你想知道你在我所說的關於狀態的差異上,但是狀態輸出在這裏並沒有真正的相關性。 (除此之外,如果你說這些文件*是以某種方式列出來的,那麼你會認爲它們不會被修改......如果它們被列出*,它們在某種程度上被修改了。)但是沒關係;你需要過去狀態的事情,因爲這不是告訴你的文件的歷史。如果有衝突,它就是提交的一部分。直到你過去堅持說它不是真的,沒有人能夠幫助你。 –

+0

在我們的存儲庫上,我只是跑了一個'find。 -name「* .java」| wc -l'。這返回了7651個文件。我不知道許多這些文件,甚至沒有在編輯器中打開它們。然而,當我將父分支合併到我的分支時,我經常會得到3-5個我從未聽說過的文件(其他開發人員已經修改並推送到父分支),在我的合併中顯示爲衝突。看起來你堅持認爲這不會發生,這可能只是溝通不暢,而是我經常觀察到的行爲,我毫無疑問。 – JoeG

相關問題