Git命令

本文旨在记录本人学习和使用git命令操作的时候遇到的问题和解决方案

修改commit注释

学习git提交文件到github的时候没有注意自己commit的命名,因此事后需要作出修改

修改最新一次的commit注释

添加了commit注释,但是没有push

1
$ git commit --amend

进入了Vim编辑状态,按i进入插入模式
直接编辑注释信息,按ESC退出插入模式
输入:wq回车后保存退出

修改历史提交过的commit注释

1
2
$ git rebase -i HEAD~5
#~5表示修改近5次的提交状态注释

命令键入后进入Vim编辑状态,文件内容最上面有着几行pick信息,pick的内容就是曾提交过的commit注释。
按i进入插入模式,将想修改的注释前的pick修改为edit,然后ESC退出插入模式
输入:wq回车后保存退出

1
$ git commit --amend

这时候就可以修改commit信息

1
$ git rebase --continue

continue后修改成功

拉取repo

1
git pull

pull后 本地文件就会下载git云端文件 保持更新一致

pull后提示abort

1
2
3
4
5
$ git pull
error: Your local changes to the following files would be overwritten by merge:
_config.yml
Please commit your changes or stash them before you merge.
Aborting

针对此情况 先使用stash备份当前工作区 再拉取git云端文件 最后再将备份的工作区恢复

1
2
3
git stash
git pull
git stash pop

push后发现 non-fast-forward

起因: 因为发现本地一个cpp文件为空 以为是误操作删除了代码 所以将本地仓库回退到了上一个commit 然后修改了cpp文件内的部分代码 然后再push操作 发现报错

1
2
3
4
5
6
7
8
$ git push -u origin master
To https://github.com/shaoyuanhangyes/LeetCode.git
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'https://github.com/shaoyuanhangyes/LeetCode.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

分析问题: 未保证远程本地仓库的一致性 因为本地仓库回退了上一个版本 所以相当于没有及时的与远程仓库同步拉取的同时 又在本地仓库新添加了一些内容 所以push操作的时候 会检测到之前从远程仓库拉取的状态和现在的状态不一致 为了安全考虑拒绝了你的push

non-fast-forward 不能快速前进 之所以不能快速前进是因为路不一样了 即在git里的提交历史出现分叉 主线不再是一条直线 git不知道如何前进 所以报错 让你来决定走哪条线

解决方案1: 合并之前的历史提交 然后再push

1
git pull --rebase origin master #重定基 将提交历史趋向于一条直线

git pull git fetch git merge的关系为

1
2
3
git pull = git fetch + git merge FETCH_HEAD 

git pull --rebase = git fetch + git rebase FETCH_HEAD

解决方案2: 直接用当前本地仓库内容去覆盖远程仓库内容

1
git push -force

除非真的想完全覆盖远程仓库 否则不要强制执行push

End of reading! -- Thanks for your supporting