那些你不知道的 git 提效命令

stash(保存未commit代码)

为什么要保存未commit代码?

主分支上出bug了,要求你马上修复(情况很紧急)。但是 dev 分支上的功能还未开发完,难道要急忙 commit 上去,备注写个‘暂存代码’?

如果想切回主分支,但 dev 分支(你的分支)上还有未写完提交的代码,就可以用stash,具体就是将内容保存下来(可以给他命名),下次在主分支切回来的时候就可以将存下来的代码恢复

可以解决切换分支的问题:

git stash//保存未commit的代码
git stash save '名称'//给保存代码命名

git stash apply//应用最近一次保存
git stash pop//应用最近一次保存代码并删除

git stash list//获取stash的所有记录
git stash apply stash@{1}//应用第二条保存的代码
git stash drop//删除最近一次stash
git stash clear//删除所有stash记录

reset --soft(回退commit更改并保存在暂存区)

git reset --hard 让commit 记录强制回溯到某个节点

git reset --soft(柔软的),除了回溯节点还会保留 commit 的内容

git reset --soft ^HEAD//恢复最近一次commit

对于已经 push 的 commit,也可以使用该命令,但是由于原创分支和本地分支有差异,需要强制推送 git push -f 来覆盖被 reset 的 commit

为什么要保存修改内容,并且切换分支?

commit 分工明确,会便于问题排查。但是你将两个功能不同的代码(一个是 feat,一个 fix)交上去了。这时你可以用 reset 将 commit 回退,然后重新调整暂存区代码,分两次提交

需要注意

git reset --soft 指定 commit 的 hash 值时,会将 这次 commit 最近一次 commit 的内容全部回退并保存在暂存区,不只是针对该 hash 的 commit

git log、git status、git reflog区别

git log

查看所有提交过的版本的详细信息

如果记录过多,则按上下键,Enter(向下显示一行),空格(显示下一页),来控制显示

git status

获取暂存区文件和已修改的文件状态,如果合并代码出现冲突,可以通过 git status 查看

git reflog

如果不小心删除了一个分支或者丢失了某个提交,怎么办?

reset \--soft 是后悔药,reflog 就是强力后悔药,记录了所有的 commit 操作记录,包括分支切换,合并,重置等等,即使在一些命令后出现了分支或者提交丢失,也可以通过reflog找到之前的代码。

应用

恢复丢失的提交或分支

  • 不小心使用 git reset --hard 或者 git branch -D 重置了提交删除了一个分支。可以用git reflog 找回之前的状态
# 查看reflog
git reflog

# 找到丢失提交的哈希值
git reset --hard <在reflog中找到丢失部分的hash>

查找历史操作记录

  • 包括仓库中的分支切换、合并、重置等操作是在什么时候进行的,有助于我们理解仓库的状态并排查问题

cherry-pick(将已经提交的 commit,复制成为新的 commit 并应用到分支里)

为什么还要复制新的 commit ?

团队开发中,dev 分支合并到线上有问题,这时候可以拉一个干净的开发分支,再从 dev 分支中把commit 复制到干净分支

# 复制单个 commit

# 通过 git log 获取目标 commit 的 hash 值,并复制
git log
# 切换分支(干净的开发分支)
git checkout clean-dev
# 使用 cherry-pick 把目标 commit 引用到当前分支
git cherry-pick commit-hash



# 复制多个 commit

git cherry-pick commit1-hash commit2-hash
# 复制多个连续 commit 区间
git cherry-pick commit1-hash^..commit2-hash
发现冲突了怎么办?

发现冲突 cherry-pick 会停下来,让用户决定如何操作

  • 继续复制:假设一共复制四条 commit,分别命名为:a,b,c,d,如果 b 发生代码冲突,此时 a 被复制成功。然后解决冲突后,使用 git checkout-pick --continue接着复制。
  • 放弃cherry-pickgit cherry-pick --abort,回到操作前的样子,就像什么都没发生过。
  • 退出cherry-pickgit cherry-pick --quit,保留已复制成功的 commit,并退出cherry-pick的流程。

revert(将某个 commit 还原,并生成新的提交记录)

为什么不用reset,要用这个?

如果你的某个提交有问题,但是已经过去挺久了,其他开发成员也提交了很多代码。上面介绍 reset 时也说了,会撤回当前 commit 以及最新 commit 的区间。这时使用 revert 就可以处理这种情况。

(编辑提交记录)

# 回复对应的 commit
git revert commit-hash
# revert 会生成一条新的提交记录,编辑提交信息(如上图),编辑好后 :wp退出

最新的log上,生成了一条 revert 记录,之前提交的记录还是保留着,但是修改的代码已经被撤回了

小方法

如果不记得常用的命令,可以输入git --help查看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明里灰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值