2013-08-27 102 views
0

我正在分支'br3'上工作。我有3個修改過的文件。我想將它們提交給不同的分支,例如'br1'。我知道,我可以放心地改變分支機構只有當我沒有在樹中修改過的文件,所以我需要:git修改了一些正在修改的文件

  • 複製文件,還原更改,變更分支機構,粘貼文件
  • 存儲文件,改變分支,去除它們

我從來沒有嘗試第二種選擇,我不知道它會工作。會嗎?還是有更好的替代我上面概述的?

回答

2

您可以執行所謂的「合併檢出」,它將嘗試將您在工作樹中所做的任何更改合併到目標分支中。

git checkout --merge br1 

如果有任何衝突,那麼你將不得不解決它們就像合併分支時一樣。

我強烈建議首先運行git stash && git stash apply,因爲這將確保您可以將工作目錄返回到其當前狀態,以防合併失敗嚴重以至於不得不重置。如果發生這種情況,你也藏匿的更改,可以恢復像這樣的工作目錄,然後再試一次:

git reset --hard 
git checkout br3 
git stash apply 
+0

它會嘗試只合並已修改的文件嗎? –

+1

@Maximus這並不重要。合併兩個相同的文件是無操作的,所以即使Git嘗試最終的結果也是一樣的:文件仍然是相同的。 – cdhowie

+0

如果你先運行git存儲,那麼除非你重新應用它們,否則不會有任何東西被合併。 – UpAndAdam

3

我知道,我可以放心地改變分支機構只有當我沒有在樹中修改過的文件,

這不是真的;如果更改將適用於乾淨,它將正常工作。如果沒有,你會被告知,並有機會修復它們。

你的第二個選擇可能是最安全的:

$ git stash 
$ git checkout br1 
$ git stash apply 
$ git add ... 
$ git commit ... 

但它很可能只是:

$ git checkout br1 
$ git add ... 
$ git commit ... 

會工作得很好。

+0

*「如果更改將適用於乾淨」* < - 我不認爲這在技術上是正確的。 IIRC,當工作目錄中的所有髒文件在當前提交和目標提交中都是相同**時,只能切換具有髒工作目錄的分支。 – cdhowie

+0

@cdhowie - 那可能是,是的。 –

+0

@cdhowie,>> _在當前和目標提交中完全相同 - 請您詳細說明一下嗎? –

1

積攢和應用是一個解決方案

git stash 
git checkout TARGET_BRANCH 
git apply 
#review and if i like it 
git stash drop 

瞭解更多關於它在這裏: http://git-scm.com/book/en/Git-Tools-Stashing

另一種是基於差異的,也許是另一個分支,你已經打開另一個回購(存儲不從回購到回購)。或者甚至在不同的盒子上!

git diff HEAD > ~/mypatch 
cd SOME_OTHER_REPO 
#(or mail it to the other box or what have you and extract to ~/mypatch) 
git checkout other_branch 
git apply ~/mypatch