git commit --amend
amending中文為糾正头遭。該命令的作用是修改上一個(gè)提交颈走。把stage區(qū)的東西并入到上一個(gè)提交之中这揣,從而不必搞一個(gè)新的提交涝开。
git commit --amend -m "an updated commit message"
更改上一條的log信息。不加-m來(lái)改log也可以护赊,只不過(guò)要通過(guò)vim操作一下惠遏。結(jié)論是無(wú)論stage區(qū)有沒(méi)有東西,你都可以commit一次骏啰,有則會(huì)把stage的東西提交到head节吮,無(wú)則只是更改log。
git commit --amend --no-edit
--no-edit這個(gè)flag代表著不改變log判耕。所以你可以用這條東西更新stage區(qū)的文件到最新的一個(gè)commit透绩。
WARNING 最好只更改本地的commit,commit一旦提交到了遠(yuǎn)端祈秕,就別再用這種方式改了,可能會(huì)導(dǎo)致沖突(私以為改個(gè)log還是沒(méi)問(wèn)題的...)
git rebase
# 涉及到branch雏胃,暫時(shí)先不理
git reflog
等同于git reflog show HEAD
请毛。
和log有啥不同?這個(gè)顯示的是操作瞭亮,不只是commit方仿,比如:
ecac366 HEAD@{1}: reset: moving to HEAD
ecac366 HEAD@{2}: revert: Revert "second add 1"
52ea7db HEAD@{3}: reset: moving to HEAD
52ea7db HEAD@{4}: checkout: moving from 5d3587cea87e9afee747b015c8cc190caae6362f to master
5d3587c HEAD@{5}: checkout: moving from master to 5d3587cea87e9afee747b015c8cc190caae6362f
52ea7db HEAD@{6}: checkout: moving from 3f0b9788c4d959c705fa416f29ff68dfc183cb70 to master
**在此說(shuō)明: **HEAD代表著當(dāng)前的分支。
git reflog show --all
可以展示所有分支的reflog。
時(shí)間標(biāo)志
1.minute.ago
1.hour.ago
1.day.ago
yesterday
1.week.ago
1.month.ago
1.year.ago
2011-05-17.09:00:00
用法比如
git reflog HEAD@{1.hour.ago}
百分號(hào)和大括號(hào)是必須的仙蚜。
用在diff時(shí)可以這么用此洲,以區(qū)分兩個(gè)版本:
git diff master@{0} master@{1.day.ago}
show其實(shí)是個(gè)隱藏命令git reflog
== git reflog show
恢復(fù)歷史(超越rebase的牛逼操作,永不再丟失代碼)
先用git reflog
看一下你要去的目標(biāo)版本委粉,然后用git reset --hard HEAD@{8}
之類的代碼把版本恢復(fù)過(guò)去即可~