gitpro之三修改历史

git commit --amend amending中文为纠正。该命令的作用是修改上一个提交。把stage区的东西并入到上一个提交之中,从而不必搞一个新的提交。
【gitpro之三修改历史】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。
时间标志
  • 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}百分号和大括号是必须的。
用在diff时可以这么用,以区分两个版本:
git diff master@{0} master@{1.day.ago}
show其实是个隐藏命令git reflog == git reflog show
恢复历史(超越rebase的牛逼操作,永不再丢失代码)
先用git reflog看一下你要去的目标版本,然后用git reset --hard HEAD@{8}之类的代码把版本恢复过去即可~

    推荐阅读