gitpro之三修改历史

2018-01-09  本文已影响22人  ManjackGo

git commit --amend

amending中文为纠正。该命令的作用是修改上一个提交。把stage区的东西并入到上一个提交之中,从而不必搞一个新的提交。

git commit --amend -m "an updated commit message"更改上一条的log信息。不加-m来改log也可以,只不过要通过vim操作一下。结论是无论stage区有没有东西,你都可以commit一次,有则会把stage的东西提交到head,无则只是更改log。
git commit --amend --no-edit--no-edit这个flag代表着不改变log。所以你可以用这条东西更新stage区的文件到最新的一个commit。

WARNING 最好只更改本地的commit,commit一旦提交到了远端,就别再用这种方式改了,可能会导致冲突(私以为改个log还是没问题的...)

git rebase

# 涉及到branch,暂时先不理

git reflog

等同于git reflog show HEAD
和log有啥不同?这个显示的是操作,不只是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

**在此说明: **HEAD代表着当前的分支。
git reflog show --all可以展示所有分支的reflog。

时间标志

用法比如
git reflog HEAD@{1.hour.ago}百分号和大括号是必须的。
用在diff时可以这么用,以区分两个版本:
git diff master@{0} master@{1.day.ago}

show其实是个隐藏命令git reflog == git reflog show

恢复历史(超越rebase的牛逼操作,永不再丢失代码)

先用git reflog看一下你要去的目标版本,然后用git reset --hard HEAD@{8}之类的代码把版本恢复过去即可~

上一篇 下一篇

猜你喜欢

热点阅读