git 经常使用操做总结

使用Git差很少有一年了,命令行也用的愈来愈多,因此把工做中经常使用到的操做在这里总结一下,以便更好的回顾与查询。git

👉 HEAD:当前commit引用安全

git version   # → git版本post

$ git branch   # → 查看本地全部的分支fetch

git branch -r # → 查看全部远程的分支命令行

git branch -a # → 查看全部远程分支和本地分支code

git branch -d <branchname> # → 删除本地branchname分rem

git branch -m brancholdname branchnewname # → 重命名分支get

git branch <branchname> # → 建立branchname分支同步

git checkout <branchname> # → 切换分支到branchnameit

git checkout -b <branchname> # → 等同于执行上两步,即建立新的分支并切换到该分支

git checkout -- xx/xx # → 回滚单个文件

$ git pull origin master:master # → 将远程origin主机的master分支合并到当前master分支,冒号后面的部分表示当前本地所在的分支

$ git push origin -d <branchname>   # → 删除远程branchname分支

$ git fetch --p # → 更新分支

git status # → 查看仓库状态

git add xx # → 把xx文件添加到暂存区去

git commit -m ' '  # → 提交文件 -m 后面的是注释(不建议使用👎)

git commit -am(-a -m) # → 提交全部的修改,等同于上两步(不建议使用👎)

git commit ./xx   # → 等同于git add ./xx + git commit(建议使用👍)

git commit --amend # → 将暂存区和当前commit合并建立一个新commit去替换当前commit

git stash # → 把当前的工做隐藏起来 等之后恢复现场后继续工做

 

git stash pop # → 恢复工做现场(恢复隐藏的文件,同时删除stash列表中对应的内容)

 

git fetch --all  # → 将远程主机的更新所有取回本地

git merge origin/master  # → 在本地(当前)分支上合并远程分支

git merge --abort  # → 终止本次merge,并回到merge前的状态(👍)

git pull origin master  # → 从远程获取最新版本并merge到本地等同于

$ git fetch origin master + $ git merge origin/master(前者更安全一些)

git push origin master   # → 将本地master分支推送到远程origin主机的master分支

git log xx  # → 查看xx文件的commit记录

git log -p xx   # → 查看xx文件每次提交的diff

git log --pretty=oneline xx  # → 查看xx文件提交的历史记录(只显示哈希值和提交说明)

git log --pretty=raw  # → 查看commit之间的父子关系(root commit是没有父提交的)

git log --graph  # → 查看当前分支commit生成的树状图

git diff HEAD HEAD^1 -- xx  # → 查看xx文件不一样版本之间的差别

git diff HEAD~1  # → 显示父节点的提交

👉 git中‘~’和‘^’的区别:

(<commit>|HEAD)^n,指的是HEAD的第n个父提交,能够经过在“^”后面跟上一个数字,表示第几个父提交,“^”至关“^1”。例如:HEAD^2 表示HEAD的第二次父提交。(<commit>|HEAD)~n,指的是HEAD的第n个祖先提交,能够经过在“~”后面跟上一个数字,表示第几个祖父提交,“~”至关“~1”,“~n”至关于连续的<n>个“^”。例如:HEAD~2 表示HEAD的第一个父提交的第一个父提交。

等式1:HEAD~ === HEAD^ === HEAD^1

等式2:HEAD~2 === HEAD^^ === HEAD^1^1

 

 

git diff --staged/--cached  # → 显示暂存区和上一次提交的不一样,git add以前忘diff的后悔药(👍)

git show --stat  # → 查看最后一次的修改

git show HEAD  # → 查看指定版本的修改(可省略HEAD,默认当前版本) 同上

git show HEAD xxx  # → 查看指定版本xx文件的修改(可省略HEAD,默认当前版本)

git reset --hard HEAD  # → 回滚到指定版本,同时清空工做目录的全部改动

git reset --soft HEAD  # → 回滚到指定版本,同时保留工做目录和暂存区的内容,并把重置的位置所致使的新的文件差别放进暂存区(👍)

git reset --mixed HEAD  # → (默认)回滚到指定版本,同时保留工做目录的内容,并清空暂存区(👍)

git reset --hard origin/master  # → 将本地master与远程master同步

👉 --hard --soft --mixed的区别可用下图表示:

 

 

 

 

✒️ 假设当前commit和工做目录以下所示:

 

1⃣️若是这时你执行:git reset --hard HEAD^

改动所有消失,未跟踪文件除外⬆️

git show --stat查看此时对应的当前commit⬆️

2⃣️若是这时你执行:git reset --soft HEAD^

reset以前commit的改动被放进暂存区,并保留了工做目录⬆️

git show --stat查看此时对应的当前commit⬆️

3⃣️若是这时你执行:git reset --mixed HEAD^同--soft同样保留了工做目录,但暂存区被所有被清空,以前commit的改动被放到未追踪文件中⬆️

git show --stat查看此时对应的当前commit⬆️

git reflog show --date=iso <branch name>  # → 查看分支的建立时间

git branch -r | awk '{print $1}' | egrep -v -f /dev/fd/0 <(git branch -vv | grep origin) | awk '{print $1}' | xargs git branch -d  # → 删除在远程已被删除的本地分支 (慎用)

 

git remote show origin  # → 查看remote地址,远程分支,还有本地分支与之相对应关系等信息。

 

git remote prune origin  # → 删除了那些远程仓库不存在的分支 === git fetch -p

git config  # → 查看和编辑git的配置

 

查看

格式:git config [--local|--global|--system] -l

git config --local -l  # → 查看仓库级的config

git config --global -l  # → 查看全局级的config

 

编辑

格式:git config [--local|--global|--system] -e

git config --local -e # → 编辑仓库级的config

git config --global -e # → 编辑全局级的config

 

修改

格式:git config [--local|--global|--system] section.key value

git config --local push.default 'simple'  # → 修改仓库级的push.default的默认行为

git config --global push.default 'current'  # → 修改全局级的push.default的默认行为

 

* 关于git default配置这里

增长

格式: git config [--local|--global|--system] --add section.key value(默认是添加在local配置中)

git config --add cat.name songhw  # → local配置写入 cat.name = songhw

git config --local --add cat.name songhw  # → 等同于上一步

git config --global --add cat.name lhammer  # → global配置写入 cat.name = lhammer

 

获取

格式:git config [--local|--global|--system] --get section.key(默认是获取local配置中内容)

git config --get cat.name  # → 输出songhw

$ git config --local --get cat.name  # → 输出结果同上一步

git config --global --get cat.name  # → 输出lhammer

 

删除

格式:git config [--local|--global|--system] --unset section.key

git config --local --unset cat.name # → 删除local配置中的cat.name = songhw

git config --global --unset cat.name # → 删除local配置中的cat.name = lhammer

 

git rebase master  # → 在当前分支对master执行rebase

$ git rebase -i 目标commit  # → 修改历史某一次提交

 

 

 

 

把须要修改的commit对应的操做指令从pick改成edit

gitrebase --continue  # → 接上一步修改完以后,继续rebase

$ gitrebase --onto HEAD HEAD^1 <branchname>   # → 撤销指定的commit,即消失在历史中

 

git push origin <brancename> -f  # → 忽略冲突,强制提交

git revert HEAD  # → 撤销指定的commit(👍)

👉 git revert和git rebase --onto的区别:

 git revert会增长一条新的commit,它的内容与指定commit的修改是相反的,两次相互抵消从而达到撤销的效果,而且在commit历史中,会存在两条提交,一条原始commit,一条它的反转commit,而git rebase --onto是直接将commit从历史记录中直接删除。

git reflog HEAD  # → 查看git仓库中引用的移动记录,默认显示HEAD的移动记录

git checkout HEAD(c08de9a)  # → c08de9a为brance删除以前所在的位置

git checkout -b <brancename>  # → 从新建立<brancename>,找回删除的分支

注:再也不被引用直接或间接指向的commit会在必定的时间被git回收,因此经过reflog操做找回删除的分支必定要及时,否则有可能因为commit被回收致使永远也找不回了

git tag  # → 列出全部<code>tag</code>

git tag -l version1.*  # → 只会列出1.几的版本

git tag <tagname>(version 1.0)  # → 建立轻量级的<code>tag</code>

git tag -a <tagname>(version1.0) -m 'first version'  # → 建立带有信息的<code>tag</code>

git tag -d <tagname>(version 1.0)  # → 删除指定<code>tag</code>

git checkout <tagname>(version 1.0)  # → 检出指定<code>tag</code>

做者:LHammer 连接:https://juejin.im/post/5a2cdfe26fb9a0452936b07f 来源:掘金 著做权归做者全部。商业转载请联系做者得到受权,非商业转载请注明出处。

相关文章
相关标签/搜索