本文旨在记录本人学习和使用git命令操作的时候遇到的问题和解决方案
修改commit注释
学习git提交文件到github的时候没有注意自己commit的命名,因此事后需要作出修改
修改最新一次的commit注释
添加了commit注释,但是没有push
1 | $ git commit --amend |
进入了Vim编辑状态,按i进入插入模式
直接编辑注释信息,按ESC退出插入模式
输入:wq回车后保存退出
修改历史提交过的commit注释
1 | $ git rebase -i HEAD~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 | $ git pull |
针对此情况 先使用stash备份当前工作区 再拉取git云端文件 最后再将备份的工作区恢复
1 | git stash |
push后发现 non-fast-forward
起因: 因为发现本地一个cpp文件为空 以为是误操作删除了代码 所以将本地仓库回退到了上一个commit 然后修改了cpp文件内的部分代码 然后再push操作 发现报错
1 | $ git push -u origin master |
分析问题: 未保证远程本地仓库的一致性 因为本地仓库回退了上一个版本 所以相当于没有及时的与远程仓库同步拉取的同时 又在本地仓库新添加了一些内容 所以push操作的时候 会检测到之前从远程仓库拉取的状态和现在的状态不一致 为了安全考虑拒绝了你的push
non-fast-forward 不能快速前进 之所以不能快速前进是因为路不一样了 即在git里的提交历史出现分叉 主线不再是一条直线 git不知道如何前进 所以报错 让你来决定走哪条线
解决方案1: 合并之前的历史提交 然后再push
1 | git pull --rebase origin master #重定基 将提交历史趋向于一条直线 |
git pull git fetch git merge的关系为
1 | git pull = git fetch + git merge FETCH_HEAD |
解决方案2: 直接用当前本地仓库内容去覆盖远程仓库内容
1 | git push -force |
除非真的想完全覆盖远程仓库 否则不要强制执行push