2013-01-03 70 views
3

我目前使用git方式如下:如何正確使用git rebase?

  1. 克隆,取回購
  2. 創建特定問題
  3. 話題分支做一些關於它的提交
  4. 結賬主分支
  5. 合併話題分行主人
  6. 推新主分支

不幸的是,這種情況時有發生。我想要做的是將一些較小的提交合併成一個更大的提交。

此外,將新分支中的所有提交合併到一個提交併將其合併到主設備中有時是一個好主意。

例如:

git branch update-docs 
git checkout update-docs 
git add -A . 
git commit -m 'updated networking doc' 
git add -A . 
git commit -m 'updated manager doc' 
git checkout master 
git merge update-docs 

你知道我現在會在主分支兩次提交「更新網絡DOC」和「更新管理文檔」。

如果我現在想在master分支中只有一個名爲「updated docs」的提交,例如包含這兩個提交的更改,我該怎麼辦?

我認爲你必須使用git rebase來處理這類任務。我只是不知道如何使用它。

我已經嘗試過:

git checkout master 
git rebase update-docs 

但合併後的變化掌握不留任何承諾,現在回購被搞砸了。

那麼有人會分享你必須使用的命令?

解決方案:

git checkout -b update-readme 
git commit -am 'rewritten readme' 
git commit -am 'added author name' 
git rebase -i master 

打開文本編輯器:

pick 6dbcbf1 rewritten readme 
pick b815bbf added author name 

你現在更改爲:

pick 6dbcbf1 rewritten readme 
squash b815bbf added author name 

然後保存爲 「:w」 和「: q「如果使用vim,它將打開另一個編輯器,您可以在其中定義新的提交名稱

rewritten readme 

那麼合併回購:

git checkout master 
git merge update-readme 
+0

請注意,如果'master'在'update-readme'已分支之後發生分歧,則您的解決方案仍將創建合併提交。如果您希望單獨提交,您應該先合併,然後以交互方式重新綁定。 rebase將擺脫合併提交,重新綁定當前主服務器上的分支提交,並允許您壓縮它們。 – user4815162342

回答

4

git merge update-docs後,執行git rebase -i origin/master。這會彈出一個interactive rebase editor,它允許你squash commits和其他rearrange them

+1

這是保存嗎?如果我在rebase編輯器中做了錯誤的處理,我不想再浪費更多... – bodokaiser

+1

這取決於你的意思* safe *。交互式rebase線性化提交併重寫歷史記錄,所以它在某種意義上是不安全的,但是同樣適用於任何rebase。這是完全安全的,你不會失去數據或歷史記錄,你總是可以使用git rebase -abort(而rebase正在進行)或'git reset -hard'與reflog commit(在rebase完成)來撤銷rebase並恢復到之前的狀態。 – user4815162342