2017-10-17 60 views
4

執行git fetchget pull時可能會有衝突。有沒有辦法獲得所有衝突文件的副本?例如文件foo.dat是衝突的,那麼我想有副本foo.dat.oursfoo.dat.theirs。我認爲SVN有類似的行爲。git:如何獲取衝突文件的副本?

  1. 獲取衝突的文件名git diff --name-only --diff-filter=U
  2. 的foreach進行復制與.ours後綴(xargs cp
  3. 獲取他們的副本?

回答

3

Git SCM book,「手冊文件重新合併」下,我們看到:

的Git存儲所有這些版本在指數下的「階段」,這都有一個與之相關的數字。第1階段是共同的祖先,第2階段是你的版本,第3階段來自MERGE_HEAD,你正在合併的版本(「他們的」)。

從這一點,這裏是一個近似的bash腳本的方法:

for file in $(git diff --name-only --diff-filter=U); do 
    git show ":1:${file}" > "${file}".common 
    git show ":2:${file}" > "${file}".ours 
    git show ":3:${file}" > "${file}".theirs 
done