git的拓展应用(提高工作效率)

git的拓展应用(提高工作效率)

​ git版本管理中,较为常用即为 pullpush 这两个指令。而实际使用中仍有一些重要的指令可为我们提供方便,本文中主要提到的指令有 stashreset --softcherry-pickrevert reflog

stash

简介

​ 当您想记录工作目录和索引的当前状态,但又想返回一个干净的工作目录时,请使用git stash。该命令将保存本地修改,并恢复工作目录以匹配头部提交。stash命令能够将还未commit的代码存起来,让你的工作目录变得干净。

应用场景

​ 当你在独立分支上开发新需求时,临时需要在master主分支上进行代码修改(例如改线上项目bug),此时你手上功能仅开发到一半,需要对代码进行暂存时,即可用到stash指令。

stash指令不同于直接commit代码,不会在分支中提交记录,仅会对代码提供一个暂存的作用。

相关命令
# 保存当前未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  

​ 当有多条stash,我们可以指定操作某一条stash,首先需要stash list列出所有记录,然后再操作指令后面直接添加上想操作的指令。

# 列出所有记录
$ git stash list  
stash@{0}: WIP on ...  
stash@{1}: WIP on ...  
stash@{2}: On ...

# 应用第二条记录
$ git stash stash apply stash@{1}

# pop, drop 指令同理

reset --soft

简介

​ 主要用于版本的回退,只对commit操作的代码进行回退,不会影响到工作区(本地保存)的文件。回退到指定版本时,该版本后修改的内容会回到暂存区,并不会被删除。

应用场景
  • 不小心commit了不该提交的内容,不想使用commit进行覆盖并留下记录,此时可使用reset --soft指令进行代码回溯
  • 代码管理规范化,提交需要按照功能点来分辨时,将不同功能的代码修改一次commit了,需要进行代码回退
相关命令
# 恢复最近一次 commit  
git reset --soft HEAD^  

# 恢复上上次 commit  
git reset --soft HEAD^^  

# 恢复上上上次 commit  
git reset --soft HEAD^^^ 

以上指令是针对于直接回退到近几次的 commit 版本,如果回退版本较多,也可以直接指定 commit 的版本号进行回溯。

# 先使用 log 命令显示我们的 commit 记录,commit 字符后的便是相应的版本号
$ git log
commit 1669bcf55e1e177284d297bb41d1f7a3411dd333 (HEAD -> ***, origin/***)
Author: ***
Date:   Tue Mar 29 14:42:58 2022 +0800
    commit222 日志

commit a7820456a42cad712c4d01df842a5f83d683333d
Author: ***
Date:   Tue Mar 29 14:37:15 2022 +0800
	commit111 日志
	
# 指定版本号进行代码版本回退到commit111版本,commit222版本的代码也会回到暂存区
$ git reset --soft a7820456a42cad712c4d01df842a5f83d683333d

**备注:**以上说的是还未pushcommit。对于已经pushcommit,也可以使用该命令,不过再次push时,由于远程分支和本地分支有差异,需要强制推送git push -f来覆盖被resetcommit

cherry-pick

简介

​ 给定一个或多个现有提交,应用每个提交引入的更改,为每个提交记录一个新的提交。简单地说,就是将a分支中已经提交的commit,复制出新的commit应用到b分支里。

应用场景
  • 为了将 a 分支中的代码复制到 b 分支中,例如在需求开发中,有些功能暂时不需要提交到正式环境中,即可将自己分支中的指定版本复制到主分支中。
  • ​ 某一分支的代码被污染了,结构较为混乱,开启新分支后将原有分支中的部分有用代码复制到新分支。
相关命令
# a分支
$ git log
commit 1669bcf55e1e177284d297bb41d1f7a3411aa333 (HEAD -> aaa, origin/aaa)
Author: ***
Date:   Tue Mar 29 14:42:58 2022 +0800
    a3

commit a7820456a42cad712c4d01df842a5f83d68aa222
Author: ***
Date:   Tue Mar 29 14:37:15 2022 +0800
	a2
	
commit a7820456a42cad712c4d01df842a5f83d68aa111
Author: ***
Date:   Tue Mar 29 14:37:00 2022 +0800
	a1
# b分支
$ git log
commit 1669bcf55e1e177284d297bb41d1f7a3411bb222 (HEAD -> bbb, origin/bbb)
Author: ***
Date:   Tue Mar 29 14:42:58 2022 +0800
    b2
	
commit a7820456a42cad712c4d01df842a5f83d68bb111
Author: ***
Date:   Tue Mar 29 14:37:00 2022 +0800
	b1

复制单个:将 a1 版本复制到 b分支中

# 切换到 b分支,执行以下命令
$ git cherry-pick a1版本号

复制多个

# 一次转移多个提交,将a1、a2复制到 b分支
# 切换到 b分支,执行以下命令
$ git cherry-pick a1版本号 a2版本号

# 区间复制,将a1至a3全部复制到 b分支
# 切换到 b分支,执行以下命令
$ git cherry-pick a1版本号^..a3版本号

备注:

​ 使用cherry-pick进行代码复制时,有时会出现代码冲突的情况。此时需要解决出现冲突的代码,然后再使用cherry-pick --continue让复制继续。如果想要终止复制,可使用git cherry-pick --abort命令。 想要回到操作前的样子,可以直接退出cherry-pick,使用git cherry-pick --quit命令

revert

简介

​ 给定一个或多个现有提交,恢复相关提交引入的更改,并记录这些更改的新提交。将现有的提交还原,恢复提交的内容,并生成一条还原记录。

​ 区别于reset指令,revert指令不会对其他提交造成影响,只会作用于恢复的提交,并会留下更改记录。

应用场景

​ 在某分支上,依次有a、b、c三个提交记录,此时想更改a提交记录中的相关代码,又不影响到b、c两次提交的代码,便可直接使用revert指令操作a记录。

相关命令

revert普通提交

# b分支,现有提交记录
$ git log
commit 1669bcf55e1e177284d297bb41d1f7a3411bb222 (HEAD -> bbb, origin/bbb)
Author: ***
Date:   Tue Mar 29 14:42:58 2022 +0800
    b2
	
commit a7820456a42cad712c4d01df842a5f83d68bb111
Author: ***
Date:   Tue Mar 29 14:37:00 2022 +0800
	b1
	
# 修改b1
$ git revert commit b1版本号

​ 使用revert命令后会进入编辑页面,编辑下日志信息后使用wq保存指令即可。此时查看最新日志,便能看到生成了一条新的revert记录,之前提交的记录仍保留着,但修改的代码已撤回。

reflog

简介

此命令用于管理重录中记录的信息。

如果说reset --soft是后悔药,那reflog就是强力后悔药。它记录了所有的commit操作记录,便于错误操作后找回记录。

应用场景

当使用reset命令回退过头时,我们可以使用reflog查询到reset前的commit记录,再次reset回去便可恢复之前的误操作。

相关命令
# a分支
$ git log
commit 1669bcf55e1e177284d297bb41d1f7a3411aa333 (HEAD -> aaa, origin/aaa)
Author: ***
Date:   Tue Mar 29 14:42:58 2022 +0800
    a3

commit a7820456a42cad712c4d01df842a5f83d68aa222
Author: ***
Date:   Tue Mar 29 14:37:15 2022 +0800
	a2
	
commit a7820456a42cad712c4d01df842a5f83d68aa111
Author: ***
Date:   Tue Mar 29 14:37:00 2022 +0800
	a1

以上是a分支的提交情况,由于a3代码出问题了,想直接删除掉a3记录,不小心删错了,将a2也删除了。

# a分支,此时仅剩下a1记录
$ git log	
commit a7820456a42cad712c4d01df842a5f83d68aa111 (HEAD -> aaa, origin/aaa)
Author: ***
Date:   Tue Mar 29 14:37:00 2022 +0800
	a1

这时便可使用reflog查询到之前的commit记录

# 查询之前的 commit 记录
$ git reflog

# 由 reflog 指令能得到a分支的所有commit记录,得到a3的版本号
# 此时再使用reset指令便可覆盖之前的误操作,仅删除a3记录
$ git reset --hard a3版本号

# 使用上述指令后,能查询到a2版本回来了

总结

本文只要介绍了五个指令,其指令和主要功能要点如下:

  • stash:存储临时代码。
  • reset --soft:软回溯,回退 commit 的同时保留修改内容。
  • cherry-pick:复制 commit。
  • revert:撤销 commit 的修改内容。
  • reflog:记录了 commit 的历史操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值