Git实操项目中的奇淫技巧

在公司发现,很多工作很久的同事对git的操作都仅限于 commit、push、merge。结合自己项目中实际遇到的问题,优雅的解决各种代码操作场景问题。

git reset --soft HEAD~1

使用场景:在开发过程中,有时候开发流程突然被打断,需要切换分支去看别的问题,这个时候就随后将本地代码进行了一个临时的commit,然后切换回来的时候,虽然可以继续开发,但是由于之前commit的功能不完整,并且继续开发的时候IDE上面对已经commit的文件没有颜色分别,有时候,改了很多文件,需要自己能够显式的看到自己对这个功能改动的哪些文件,还要继续接着改。那么这个命令会将你最后一个commit 回退到工作区 ,后续开发完成后再进行commit。切记,不建议任何时候使用git reset --hard这个命令。

git commit --amend

使用场景:在开发完成后,在已经完整功能commit的情况下,突然发现还有一个小小的改动,可能就只是一个空格,这个时候,不想单独的去开个commit去提交这个空格,并且这个空格本来就是属于上面那个功能,那么可以使用这个命令,将其追加到上个commit中。

1. git add .
  • add 需要追加的文件,add .是当前工作区所有的文件,可以自己选择性的追加也行。
2. git commit --amend
  • 这一步之后,会有vi框提示可以修改commit信息

git cherry-pick

使用场景:有时候好几个人都在自己的功能分支上开发的时候,需要依赖另外一个人的分支上的某个commit功能,但是这个时候对方的功能并没有完成,也不是自己需要的,只需要他其中某一个commit,自己这边的流程才能继续走下去,这个时候就需要把对方的某个commit给检索到自己的本地分支上面来。

1.git cherry-pick
  • 这个地方需要找到commit的hash值,可以通过git log查看。可以一次cherry多个commit。如果没有冲突则流程结束。
2. git add .
  • 这一步和rebase冲突一样,加入缓存区。
3. git cherry-pick --continue
  • 继续进行pick,依然有冲突则重复 2、3步骤

git push origin temp:feature/home

使用场景:在本地开发中,一直都在同一个分支上开发。本地分支名字起的不太好,或者本地分支也有对应的远程分支,之前已经有过merge,本地commit有过rebase merge等操作,如果直接push到origin会与远程同名分支产生冲突,导致推不上去,这个时候可以将本地分支推送到远程的时候换一个名字。

1. git push origin temp:feature/home
  • 这个推送的意思是,本地的分支名字叫做temp,代码推送到远程时的分支名字是 feature/home

git rebase

使用场景:在正常我们进行任务开发时候,是不会在master上直接拉分支开发,一般每个迭代会有一个基准分支,假设为dev。 那么我们自己基于dev分支check出自己的开发分支feat后,commit后肯定是需要同步一下我们的dev分支才能发起review的,这个时候很可能就会产生冲突。那么如何解决冲突了?

1. git rebase origin/dev
  • 这里也可以本地切换到dev分支pull后,再进行 git rebase dev,直接拉远程肯定是最新的。这个时候出现了冲突的话,本地先解决冲突。
2. git add .
  • add之后你的本次commit冲突就已经被resolve,由于rebase是按commit一个一个的合并的,所有还需要继续合并
3. git rebase --continue
  • 这一步之后,如果没有冲突那么流程就结束了,如果依然有,则重复2、3步骤,直到结束。

git revert OLDER_COMMIT^..NEWER_COMMIT

使用场景:不知道大家有没有碰到过这种场景,项目临近上线时期,突然发现此功能因某些原因,不得不停止上线,此时,这个功能你有连续十几个commit需要回滚,那么怎么快速回滚了,我们可以通过此命令,回滚你的连续的十个commit,也就是可以区间选择段来回滚

git rebase -i

使用场景:有时候commit记录太多太杂,需要整理commit,譬如合并多个commit,或者删除某个commit

1. git rebase -i HEAD~5
  • 这个代表你需要对最近的五个commit做合并或者删除处理。
rebase.png
2. 如上图 默认都是pick,将pick改为s 则代表将当前合并至上个commit,改为d则代表删除当个commit
squash.png
  • add之后你的本次commit冲突就已经被resolve,由于rebase是按commit一个一个的合并的,所有还需要继续合并
commit.png
  • 修改完commit之后,按wq保存退出

vi使用

  • 在上面这些命令中,很多都需要进入到vi的编辑框进行操作,默认是命令行模式,需要按a或者i来进入输入模式修改,这个时候就可以对里面文字就行修改操作。
  • 修改完后需要按esc 键回到命令行模式,然后按 : 进入到底线命令行模式,这时按wq就可以保存退出了

你可能感兴趣的:(Git实操项目中的奇淫技巧)