rebase: 重設基礎點#
將當前的branch
的基礎點移動到目標分支。這麼做的好處是主幹master
明確。
git rebase <目標分支>
不過rebase
之後 master 並沒有跟隨過去,需要再合併一下:
git checkout master
git merge <剛剛的分支>
這樣 master 就和分支合併了。
剛剛的提交提錯了,想要修改怎麼辦?#
文件修改好之後使用 --amend
,這會產生一個新的commit
並替換掉最後一個commit
git add 文件
git commit --amend -m 說明
錯了的是倒數第二個 commit,不是最後一個 commit,還能修改嗎?#
當然可以,這裡可使用交互式rebase
,參數:-i
git rebase -i HEAD^^
這裡的^^
意思是後退幾個commit
,數量為^
的數量,也可以寫成~2
,數字代表後退的數量。
回車之後,我們發現進入到了一個可編輯的頁面,值得注意的是,上面的commit
排序是倒序的,我們可以看到每個commit
前面有一個pick
,我們按i
進入編輯,把想要重新修改的 commit 前面的pick
改成edit
,退出界面之後我們可以看到狀態就是在當前的commit
上了,修改完成之後是否使用--amend
提交,成功之後我們可以通過git rebase --continue
來跳過不需要修改的commit
,整個過程就結束了。
diff: 對比#
用來對比修改。
git diff //對比工作區和暫存區
git diff --staged // 對比暫存區和上一次提交
git diff HEAD // 對比工作區和上一次提交
想要暫存工作區?#
暫存並清空工作目錄。
git stash
Warning
-git stash
並不會暫存你未追蹤的文件,假如說你新建了一個文件,你還沒有來得及add
就stash
,這個文件並不會存起來,想要把這些文件一起暫存使用-u
。
- 恢復文件請使用git stash pop
命令。
想要回滾 commit?#
reset
可以重置HEAD
和branch
的位置
git reset <分支名或SHA-1>
--mixed
默認,把工作區和暫存區全部保存為工作區--hard
:不保留工作區,你的工作區會被清空!!--soft
:保留工作區和暫存區