更改提交:
【注】如果一個分支已經公開了,並且可能已經存在於其他版本庫中了,你就不應該重寫,修改或更改該分支的任何部分。
通過git reset命令來更改提交:
git reset --soft HEAD // --soft:索引和工作目錄的內容不變,只是將HEAD遊標指向給定的提交,通過--soft選項,可以調整提交信息,即commit -m "[new]"
git reset --mixed HEAD^ // 和git reset HEAD^, 默認爲--mixed,索引改變,工作目錄不變,通過--mixed選項,可以修改要提交的文件內容。
git reset --hard HEAD^ //索引和工作路徑都改變。
通過git cherry-pick命令:
通常用於把版本庫中一個分支的特定提交引入一個不同的分支中。還可以重建一些提交。
A---B---C---D---E---F---G---H (dev)
\
V---W---X---Y---Z (rel_2.3)
例子:開發線dev在提交F中修復了一個bug,假設發佈版rel_2.3也存在這個bug,可以通過cherry-pick來將dev 中的提交引入rel_2.3中修復bug。
git checkout rel_2.3
git cherry-pick dev~2
A---B---C---D---E---F---G---H (dev)
\
V---W---X---Y---Z---F' (rel_2.3)
通過git revert 命令:通常用於撤銷歷史記錄中的指定提交。
git revert master~3
通過 git commit --amend 命令:
通常這條命令用於修改最新提交,amend意味着提交內容基本相同,但某些方面需要調整或清理。最主要的通途就是在剛做一個提交後修改錄入錯誤。
git add [file] //修改了最新提交的某個文件,然後暫存。
git commit --amend //提交修改,生成一個新的提交替代之前的提交。
通過 git rebase 命令:
通常這條命令用於變基提交,也就是用來改變一串提交以什麼爲基礎的。
git checkout [要變基的分支]
git rebase [基礎分支---要變基到的提交]
或
git rebase [基礎分支---要變基到的提交] [要變基的分支]
例如,變基之前:
A---B---C---D---E (master 基礎分支)
\
W---X---Y---Z (topic 要變基的分支)
變基之後:git rebase master topicA---B---C---D---E (master 基礎分支)
\
W'---X'---Y'---Z' (topic 要變基的分支)
git rebase --onto master maint^ feature (master:要變基到的提交,maint^:當前分支的基礎提交,feature:要變基的分支)
git rebase --continue //解決衝突後,執行命令繼續變基
git rebase --skip //遇到衝突,執行命令,跳過沖突
git rebase --abort //遇到衝突,執行命令,放棄衝突
變基與合併
A---B---C---D (master)
\
X---Y---Z (dev)
\
P---Q (dev2)
如果現在要將dev分支變基到master最近的提交,那麼需要:git rebase master dev
git rebase dev^ dev2