① git rebase :在新位置重新提交,改變 commit 序列的基礎(chǔ)點(diǎn)。
把 merge 換成 rebase,操作步驟:
第一步:
git checkout branch1
git rebase master
第二步:
git checkout master
git merge branch1
解釋一下:第一步切換到branch分支上,執(zhí)行rebase,目的是將分支的起點(diǎn)移動(dòng)到想要合并的分支的HEAD上,第二步是切換到主分支,并移到最新的提交(commit)。為避免和遠(yuǎn)端倉(cāng)庫(kù)發(fā)生沖突,一般不要從 master 向其他 branch 執(zhí)行 rebase 操作。
② git --amend 修復(fù)當(dāng)前提交的錯(cuò)誤
注意:并不是在原來(lái)那個(gè)commit 上修改,而是生成了一個(gè)新的提交。
③ 場(chǎng)景:想修改完善之前的提交(commit)
- git rebase -i 目標(biāo)commit : 發(fā)出想要修改的請(qǐng)求,會(huì)彈出git編輯界面,將想要修改的commit 對(duì)應(yīng)的 pick修改為edit(應(yīng)用這個(gè) commit,然后停下來(lái)等待繼續(xù)修正),然后rebase 過(guò)程已經(jīng)停在修改的 commit 的位置。
2.在該commit上進(jìn)行修改,commit --amend 來(lái)把修正應(yīng)用到當(dāng)前最新的 commit;
3.操作完成之后用 git rebase --continue 來(lái)繼續(xù) rebase 過(guò)程。將修改的commit 后面的提交應(yīng)用到該rebase上。
④ 拋棄原來(lái)的提交(回滾)
git reset --hard HEAD^
git reset --hard 目標(biāo)commit
HEAD 表示 HEAD^ 往回?cái)?shù)一個(gè)位置的 commit
⑤撤銷過(guò)往的提交
兩種方式:
- git rebase -i 在編輯界面中刪除想撤銷的 commits
- git rebase --onto 在 rebase 命令中直接剔除想撤銷的 commits
--onto 后面有三個(gè)參數(shù):目標(biāo) commit、起點(diǎn) commit(注意:rebase 的時(shí)候會(huì)把起點(diǎn)排除在外)、終點(diǎn) commit。
⑥ reset
--hard:重置位置的同時(shí),清空工作目錄的所有改動(dòng);
--soft:重置位置的同時(shí),保留工作目錄和暫存區(qū)的內(nèi)容,并把重置 HEAD 的位置所導(dǎo)致的新的文件差異放進(jìn)暫存區(qū)。
--mixed(默認(rèn)):重置位置的同時(shí),保留工作目錄的內(nèi)容,并清空暫存區(qū)。