2017-01-18 45 views
0

我有一個分支有幾個變化,我想複製它的內容爲一個新的分支。這是新分支essencially將具有相同的內容,也許少一點。所以,是否有可能複製一個新分支或另一個分支保留這個髒分支?複製髒分支保留它的新分支

+0

@DurgpalSingh,它不重複。我的問題是關於本地分支。 –

+0

Alderath是正確的,沒有「骯髒的分支」這樣的事情。 – torek

回答

2

我想你誤解的東西如何git的作品。每個分支只是一個指向特定提交的指針。

有沒有這樣的事情作爲一個骯髒的分支。你可能在考慮分支簽出時的情況,並且你有一個骯髒的工作樹。 (這意味着你已經改變了你的工作樹,但還沒有提交)。但分支並不髒。工作樹很髒。

只有方式,你可以節省的東西分支是提交它。如果你不推的分支,只需創建一個臨時的承諾可能是好的:

git add -A 
git commit -m "tmp commit" 
git checkout -b new_branch 
git reset HEAD^  #this will reset the branch pointer to the previous commit, 
        #but keep the work-tree 

而當你想回到原來的分支和恢復髒worktree:

git checkout original_branch 
git reset HEAD^ 

或者,您可以將更改保存在存儲中。這可能是首選的解決方案:

git add -A 
git stash --keep-index 
git checkout -b new_branch 

而當你想回到原來的分支和恢復髒worktree:

git checkout original_branch 
git stash pop 
+1

爲什麼'git reset HEAD ^',而不是'git reset HEAD'? – Adder

+2

'git reset HEAD'和'git reset HEAD ^'表示不同的東西。 'HEAD'是當前分支上的最新提交。 '^'的意思是「之前的提交」。由於我們在分支上做了一個臨時提交,因此我們希望在最新提交(我們希望擺脫臨時提交,僅用於存儲更改)之前重置爲提交。 通常,您應該更喜歡第二種存儲方法。這個用例基本上就是存儲的意思。我剛剛添加了第一個示例,以顯示您需要在original_branch **上存儲更改**。 – Alderath

2

那麼呢?

git checkout -b <new-branch>

+0

Arpit,這樣我的骯髒的分支是保持? –

+0

一旦創建了新分支,刪除髒分支'git分支-D <髒分支>' – Arpit

+0

Arpit,nooo,我想保留它;) –

相關問題