git常用场景总结

363 阅读5分钟

前言

git在我们日常的开发过程中使用的频次还是非常的高的,但是git的命令繁多,我经常会突然想不起来某个命令该怎么输入,所以在这里根据平时常用的场景来整理一些了git操作,你可以根据所需的场景来查找你所需进行的git的操作,搭配command + f/ctlrl + f食用更佳~。

需要注意的是,这里并不会详细讲解git的一些概念或者命令使用,不理解的一些地方建议读读官方文档。后续我可能会更新一些关于git的内容,有兴趣的小伙伴也可关注下~

修改撤销

在使用git的过程中撤销工作区和暂存区做的修改是常常要做的事情,如何撤销工作区或者暂存区的修改,参考如下内容:

# 撤销工作区的修改,内容将会和最新的版本保持同步
git checkout -- <file>
# 撤销保存在暂存区的修改,将暂存区的内容放入工作区中
git reset HEAD <file>

版本回退

有时候因为commit了错误的内容,我们需要回退版本,方法如下:

# 有几个^就能回退几次
# 不带参数的情况下会将工作区的内容和回退版本带来的差异都放进工作区
git reset HEAD^ 
# 使用--hard参数直接回退到之前的版本,所有内容都会重置
git reset --hard HEAD^
# 会保留工作区的内容同时将回退版本带来的差异保存到暂存区
git reset --sort HEAD^

# n回退的次数
# 不带参数的情况下会将工作区的内容和回退版本带来的差异都放进工作区
git reset HEAD^ 
# 使用--hard参数直接回退到之前的版本,所有内容都会重置
git reset--hard HEAD~n
# 会保留工作区的内容同时将回退版本带来的差异保存到暂存区
git reset --sort HEAD~n

使用rebase合并commit

随着开发工作的复杂化,我们commit提交记录会有很多冗余,这个时候就需要对commit做一些简化合并,让提交记录更加清晰。这个时候rebase这个命令可以很好的解决这个问题。

// 两种方式都行看个人使用习惯
// 这里的~后面的数字是需要合并的commit的数量
git rebase -i HEAD~2

git rebase -i <commit>

输入上面的命令后(这里输入的是git rebase -i HEAD~2),就会出现下图的样子。到了这一步就需要除了第一行外的所有pick改了s,保存后即可进行下一步。

上一步完成后会进入到如下界面,保留所需的commit message即可。保存后就完成了整个rebase流程。

需要注意的是,rebase操作需要谨慎使用,最好是在没有push到远程仓库时使用,一旦push到了远程仓库,在主分支、开发分支等需要多人协作的重要分支不要进行rebase操作。如果在自己的开发分支一旦提交到远程分支rebase后,需要使用git push -f来覆盖掉原有提交。

撤销rebase操作

在某些情况下,不小心将不需要rebase的内容也rebase了,这个时候就需要撤销rebase操作

# 查看git 操作记录
git reflog

使用git reflog会出现如下界面 然后回退到rebase操作前,比如说这个地方是7ace419

git reset --hard 7ace419

修改commit消息

如果只是修改最近一次的commit的话很简单,只需要使用下面这个命令即可

git commit --amend

如果要修改更早的提交的话就又需要使用到rebase命令了,这里继续使用git rebase -i HEAD~2,还是上面那个界面
将要修改的commit的pick修改为edit,保存后,返回命令行界面,使用git commit —amend修改commit消息,最后使用git rebase —continue完成合并。

需要注意的是,修改之后commitid是会改变的。

复制其他分支的部分commit到现在分支

有时候需要同步其他分支的某些提交而不是全部的提交到某个分支

# 复制单个commit
git cherry-pick <commit>
# 复制多个commit
git cherry-pick <commithash> <commthhash2>

用图形化的方式查看git记录

有时候我们需要使用图形化的方式来更直观的看git记录,可以在git log后增加—graph 选项。

# 用图形的话的方式看git历史
git log --graph
# 每一行是一次提交历史
git log --graph --pretty=oneline
# 每一行是一次提交历史 同时提交历史简化
git log --graph --pretty=oneline --abbrev-commit

重命名分支

git branch -m <oldname> <newName>

删除远程分支和本地分支

有时候我们需要删除远程分支和本地分支的,比如说分支合并到主分支后,一般我们都需要删除被合并的那条分支,所以这里提供了删除远程分支和本地分支的步骤:

# 删除本地分支 -d 会检查分支是否merge -D是强制删除
git branch -d [branchname]
git branch -D [branchname]
# 删除远程分支
git push origin --delete [branchname]

有这样一种情况在其他地方删除了远程分支本地需要同步远程分支

# 查看远程分支的跟踪情况
git remote show origin

Remote branches中如果有分支是stale话就需要用git remote prune同步远程分支的情况。

# 同步远程分支
git remote prune origin
# 查看剩余哪些远程分支
git branch -r

需要注意的是在同步之后本地的分支是不会同步删除的需要自己使用git branch -d <branchname>清理。如果需要清理的分支比较多怎么办,可以使用下面这个方式:

# 谨慎使用 建议在开发工作完成且已经提交到远程仓库的情况下使用
git branch -a | grep -E -v 'develop|master' | xargs branch -d