2011-08-27 63 views
7

我在我的主分支的孩子中有一些不需要的git提交。我對一個功能分支進行了重新綁定,併成功合併了導致產生的一些衝突,但是我沒有意識到,重新分配不會讓我在功能分支上。如果我現在檢查一下功能分支,它大概會覆蓋我在工作樹中所做的更改,使它們處於某種程度的不穩定狀態。我可以「git checkout -m」,但這顯然只用於合併未提交的本地更改。我如何才能進入功能分支,並保留我目前在主分支下的未經承諾但已承諾的更改(無需將它們推送到主分支)?我應該使用git rebase - 去嗎?如果是這樣,我現在應該做些什麼,我已經重新啓動了-onto?如何將已提交但未修改的更改移至另一個分支?

+0

不是一個笨蛋。這是一個非常不同的問題,已經發生了變化,更不用說已經經歷了一個不正確的rebase。 –

回答

7

你可以這樣說:

  1. git checkout branch簽出特性分支。
  2. git reset --hard master現在將分支移動到與master相同的提交。通過這樣做,您將失去分支中的所有提交。由於你的基金會,所有這些承諾應該有master副本,所以你不應該失去任何東西。
  3. git checkout master結帳master
  4. git reset --hard origin/mastermaster重置爲origin回購的狀態。這假定您沒有對master進行任何改動。如果是這樣,請用您要重置爲的提交ID替換origin/master
+0

「你失去了分支中的所有提交...」我不遵循這個部分。我的目標是通過將他們移動到特性分支來保持我的未完成提交。 「這個假設你沒有對主人進行任何改動」。再一次,沒有提交的提交是我問我問題的全部原因。 – BrianHoltz

+0

我看到我想要做的是在git-reset手冊頁中的「撤消提交,使其成爲主題分支」中描述。 – BrianHoltz

+0

BrianHoltz提到的git手冊頁在這裏:http://git-scm.com/docs/git-reset/2.0.0#_examples –

3

首先重申你的情況,以確保我的理解正確。你在master上做了一些提交,並且想把它們移動到feature,所以你跑git rebase feature?首先,你想撤消這個。假設您還有master已簽出,並且沒有進行任何rebase,請運行git reset --hard ORIG_HEAD以撤消rebase。

現在,將您的提交移動到feature分支的正確方法。做,所以你不要弄亂master檢出一個臨時黨支部:

git checkout -b temp 

現在變基承諾上origin/master自上次的所有更改到feature

git rebase --onto feature origin/master 

即移動temp分支爲如果它從feature分支。我們的修改合併到feature,做到:

git checkout feature 
git merge temp 
git branch -d temp 

這將是一個快進合併,因爲你剛剛重建基礎。

相關問題