git超实用命令汇总
本文持续更新工作中常用的git命令
stash
描述
- stash 命令能够将还未 commit 的代码存起来,让你的工作目录变得干净
- 当您想记录工作目录和索引的当前状态,但又想返回一个干净的工作目录时,请使用git stash。该命令将保存本地修改,并恢复工作目录以匹配头部提交。
应用场景
- 正在develop分支开发新需求时,突然需要紧急处理线上的bug,要立即修复。没法立刻切到master分支拉代码建新分支。此时可以使用git stash命令来暂存当前未commit的代码,然后切master分支操作,修复完线上紧急的bug后,切回develop只需git stash apply命令即可回复相关代码
相关命令
# 保存当前未commit的代码
git stash
# 保存当前未commit的代码并添加备注
git stash save "备注的内容"
# 列出stash的所有记录
git stash list
# 删除stash的所有记录
git stash clear
# 应用最近一次的stash
git stash apply
# 应用最近一次的stash,随后删除该记录
git stash pop
# 删除最近的一次stash
git stash drop
reset --soft
描述
- 回退你已提交的 commit,并将 commit 的修改内容放回到暂存区
- 一般我们在使用 reset 命令时,git reset --hard会被提及的比较多,它能让 commit 记录强制回溯到某一个节点。而git reset --soft的作用正如其名,–soft(柔软的) 除了回溯节点外,还会保留节点的修改内容。
应用场景
- 不小心把不该提交的内容 commit 了,这时想改回来,可以用reset --soft
- 对于 commit 的内容要求职责明确,颗粒度要细,便于后续出现问题排查。本来属于两块不同功能的修改,一起 commit 上去,这种就属于不规范。若出现此类情况可以用reset --soft
相关命令
# 恢复最近一次 commit
git reset --soft HEAD^
# 在reset --soft指定commit号(HashCode)时,会将该 commit 到最近一次 commit 的所有修改内容全部恢复,而不是只针对该 commit
git reset --soft 1a900ac29eba73ce817bf959f82ffcb0bfa38f75
- 以上说的是还未 push 的commit。对于已经 push 的 commit,也可以使用该命令,不过再次 push 时,由于远程分支和本地分支有差异,需要强制推送git push -f来覆盖被 reset 的 commit。
cherry-pick
描述
将已经提交的 commit,复制出新的 commit 应用到分支里
应用场景
- 版本的一些优化需求开发到一半,可能其中某一个开发完的需求要临时上,或者某些原因导致待开发的需求卡住了已开发完成的需求上线。这时候就需要把 commit 抽出来,单独处理。
- 开发分支中的代码记录被污染了,导致开发分支合到线上分支有问题,这时就需要拉一条干净的开发分支,再从旧的开发分支中,把 commit 复制到新分支。
相关命令
git cherry-pick <commitHash>
# 一次转移多个提交:
git cherry-pick commit1 commit2
# 多个连续的commit,也可区间复制:
git cherry-pick commit1^..commit2
# git cherry-pick 命令的常用配置项如下
-x 提交信息的末尾追加一行,方便以后查到这个提交是如何产生的
-s 在提交信息的末尾追加一行操作者的签名,表示是谁进行了这个操作
--abort 发生代码冲突后,放弃合并,回到操作前的样子
--quit 发生代码冲突后,退出 Cherry pick,但是不回到操作前的样子
--continue 解决代码冲突后,第一步将修改的文件重新加入暂存区( git add . )第二步使用该的命令,让 Cherry pick 过程继续执行
revert
描述
- 将现有的提交还原,恢复提交的内容,并生成一条还原记录。
应用场景
- 开发上线的功能有问题,需要马上撤回,分支上最新的提交还有其他同事的代码,不可以用reset,不然还得麻烦其他同事再合一次,可以使用该命令。
相关命令
# revert掉自己提交的commit
git revert <commitHash>
# 因为revert会生成一条新的提交记录,这时会让你编辑提交信息,编辑完后:wq保存退出
# 还有一种类型是合并提交,若合并提交是两条分支的交集节点,而 git 不知道需要撤销
# 的哪一条分支,需要添加参数 -m 指定主线分支,保留主线分支的代码,另一条则被撤销
#-m 后面要跟一个 parent number 标识出"主线",一般使用 1 保留主分支代码
git revert -m 1 <commitHash>
reflog
描述
- reset --soft的加强版,它记录了所有的 commit 操作记录,便于错误操作后找回记录。
应用场景
- 自己在其他人分支提交了代码还推到远程分支,然后用reset 过头,把同事的commit 搞没了。此时可以用该命令找回。
相关命令
git reflog
#上面命令获取到错误提交的commitHash,然后进行恢复
git reset --hard <commitHash>