2016-02-23 54 views
1

我有一個私人項目,它的第一個版本是從另一個項目中分出來的(我會稱之爲ABC)。我對一些文件做了幾處更改,並將這些更改提交到本地回購站,但大部分其他文件都保持不變。樹會或多或少是這樣的:

-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o <- abc/master 
     \ 
---------o <- abc/v1 
      \ 
-----------o-o-o-o-o <- mine/master 

一段時間後,ABC發佈的版本2.樹,然後,更改爲:

-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o <- abc/master 
     \      \ 
---------o <- abc/v1    \ 
----------\-----------------------o <- abc/v2 
      \ 
------------o-o-o-o-o <- mine/master 

我想裏面合併新版本我的樹,但新版本對我修改過的幾個文件做了很多修改。我知道在解決合併衝突時,你可以讓git更喜歡遠程修改而不是本地修改,但問題是這樣做可能會消除我所做的更改,這些修改對我來說非常重要。

有沒有一種方法可以告訴git在解決文件衝突時接受遠程更改,但沒有觸及我保留的文件,而是讓我解決了這些文件?也就是說,我想要一種方式來指定由某個特定作者(在本例中爲我)更改的文件不應該自動衝突解決。

回答

1

一種可能的解決方案是使用git stash。運行'git stash'會隱藏所有未提交的本地更改,然後您可以引入新版本的ABC。一旦你在ABC的新版本中,你可以運行'git stash pop'來恢復你的本地更改,並對合並衝突進行排序。

+1

這是假設你還沒有提交任何提交,就像你剛開始在ABC版本1上工作一樣。 – DeveloperDemetri

+1

雖然。我編輯了描述以使我的情況更加清晰。 –

0

我不認爲有一個直接的選項告訴git合併排除某些文件,但您可以使用git diff --name-only來獲取您已修改的文件列表。將您修改的文件複製到備份文件夾。這樣做時,cp --parents將幫助您保持文件層次結構。

接下來,您運行git merge -s theirs以獲取其他分支對您的所有修改分支,然後通過備份文件夾中的文件覆蓋工作樹。

現在git diff會告訴你的差異。您可以修改它以手動進行合併。

+0

這似乎是要走的路,因爲我從'git merge'混入'v1'和'v2'版本的文件所帶來的許多問題都沒有改變。我會試試看看它是否有效。 –

+0

'--theirs'不是git合併選項 –

+0

@Romário對不起,應該是'git merge -s theyirs' – gzh

相關問題