主要参考:廖雪峰的git教程,阮一峰的git相关教程,git官方文档
1、git本地已经进行了merge操作并提交,但是还没有push到远端仓库,此时要撤销本次merge操作,可以执行:
git reset --merge ORIG_HEAD
具体参考:Undo a Git merge that hasn't been pushed yet
2、如果在a分支执行了git stash,然后切换到b分支,干完活提交后准备恢复现场,结果没有切换回a分支就执行了git stash pop,怎么样恢复?
(1)首先,在错误的分支执行了git stash pop后,不管怎么样,首先就是工作区的代码被污染了(如果git commit了,那就是暂存区也被污染了),此时首先要做的肯定是还原回去:git reset --hard;
(2)切换回a分支,然后如果在当前终端还能找到之前的stash的hash码,则直接执行git stash commit hash_code即可,如果已经关闭过终端了,则可使用git log --graph --oneline $(git fsck | awk '/dangling commit/ {print $3}')找回;
具体可参考:找回pop掉的stash
3、git查看所有分支,包括远端分支:
git branch -a
4、git删除分支:
a、如果需要删除的分支不是当前分支,使用:git branch -d <branch_name>;
如果为删除当前所在分支,则使用:git branch -D <branch_name>
b、删除远程分支内容:git push origin :<branch_name>,注意,冒号前面的空格不能少,相当于把一个空分支push到远端server上,等于删除该分支。
具体可参考:Git删除分支/恢复分支,Git删除分支
5、git merge相关介绍:git-merge完全解析
6、如果代码没有啥改动,但是发现commit消息没写好,可以使用:git commit --amend指令
可参考:Git commit 常见用法
7、git submodoule相关:
概念理解:子模块可以认为是主仓库里面包含的一个仓库,常见的是在主项目里的某个文件夹作为子模块,因此,如果需要查看子仓库的信息,要切换到相应的目录下,执行相应的git指令,如git status/branch/log等;
(1)目前碰到的一个问题,就是在测试服主仓库目录下,执行git status,发现子模块有commit,现在想更新子模块到最新,由于该修改为他人修改遗留,首先执行git reset --hard后,发现子模块还是有commit,执行git submodule update --init --recursive报错abort;解决方法是,切换到子模块目录下,再次执行git reset --hard后,子模块的工作区终于清理干净,然后执行git submodule update --init --recursive成功。