前言
在各种版本并行,需求不断迭代的过程中,我们经常会遇到各种打断开发的场景:
场景一:当前版本功能开发到一半,上级临时要求去修复某个线上bug?你能说不吗, 那当然绝对服从组织安排 😄
场景二:已经提交且合并主分支的功能版本,产品经理不要了,或则更有甚者只要求留部分功能。你又能说不吗?🐶
场景三: 不小心把开发到一半的commit,也一并提交上去了。如何优雅退回?
还有其他各种奇葩场景,欢迎大家评论区留言讨论 👏
那么应对错综复杂的版本迭代,分支串行,如何把git用得更加得心应手呢,以下内容快速入门git,根据不同的场景,在工作中快速对照使用,希望能够帮大家提升工(hua)作(shui)效(shi)率(jian) 💪
1. git clone xxx仓库地址
场景:克隆一个项目,开始搬砖 🧱
2. git 提交三步曲
git add .
git commit -m'fixbug:解决某某bug'
git push
场景:开发完毕功能后,提交更改的代码。
使用:开发完毕功能后,提交更改的代码。
当知道一些git命名后,想了解很多api含义或者参数用法,只需要如下:
git add --help
git commit --help
场景:查看某个git 命令的更多信息。
示例:git commit --help
3.git status
场景:随时随地查看当前工作区的状态,例如git add 什么文件,git commit 什么文件等等
示例:
4.git log 主机名/分支名
或 git reflog 主机名/分支名
场景:查看仓库提交的记录
使用:
4.1git log
查看当前分支的log记录,不用切换分支查看其他分支的log,可以使用git log 主机名/分支名
4.2 git reflog
可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)
例如: 下文👇提到的reset命令,执行git reset --hard HEAD~1
,退回到上一个commitid,用git log
看不到被删除的commitid,用git reflog
可看到被删除的commitid,恢复到被删除的那个commitid
5.git remote -v
git remote add origin <git@github.com>:xxx/xxgit
,添加主机名为origin的远程仓库target
git remote add fork <git@github.com>:xxx/xxgit
git remote rm origin
移除主机名为origin的远程仓库target
场景:从origin分支,fork下来一个自己分支,添加一些修改后,想push回到origin分支
使用:查看远程 fetch/push 对应的分支
6.git reset --soft HEAD~
或 git reset --hard HEAD~
场景:不小心commit了不想提交的更改,想撤回来。
使用:可撤销最近一次commit到本地仓库的提交,所有撤销的代码修改进入暂存区(更改的代码还在)。
命令详解:
HEAD~
表示最近一次的commit,也可以写成HEAD~1,想要撤回最近N次的commit,对应 HEAD~N
--soft
不删除工作空间的改动代码 ,撤销commit,不撤销git add xxx
--hard
删除工作空间的改动代码,撤销commit且撤销 git add xxx
7.git stash
场景:在功能分支a进行功能开发,代码也写了一半。这时候需要切换到另外的分支临时修复一个bug。不想commit,不想丢失当前修改。
使用:可把当前的工作内容,stash起来,还原本分支工作区。git statsh list
可以查看stash的记录。是一个队列,git stash pop
可以应用最近一个statsh 而且删除记录。
stash | |
---|---|
vt. | 藏匿; 隐藏; 存放; 贮藏; |
中英对照例句 | They had all that money stashed away in the loft |
他们把那笔钱全都藏匿在阁楼上了。 |
8.git commit --amend
amend | 英[əˈmend] 美[əˈmend][] |
---|---|
vt. | 修正; 修订(法律文件、声明等); |
中英对照例句 | The Problems in City Tourism Image and the System to Amend |
城市旅游形象问题及系统修正研究 |
场景:如果commit注释写错了,只是想改一下注释。
使用:输入命令后,会进入vim编辑器,修改完成你要的注释后保存即可。其中,vim 的命令,按键 i 进入编辑页面,修改好后,按键 :wq 保存并退出。
9. git cherry-pick <commitHash>
场景:如果想把A分支合并到B分支,git merge 分支名
就可以把全部的commit合并过来。但有时候只想合并A分支个别commit 修改。
使用:git log 主机名(远程一般为origin)/master
查看commitid, git cherry-pick <commitid1> <commitid2>
上面的命令将 commitid1 和 commitid2 两个提交应用到当前分支。会在当前分支生成两个对应的新commit.之后检查无误后,可以push。有时候会冲突,可以解决后在push。
10. 创建分支,切换分支,删除分支
先用git checkout --help
查看下文档。
10.1 创建分支
其中比较常用到的,拉取远程分支,并创建本地分支,checkout操作:
git checkout -b 本地分支名 远程分支名如
使用: git checkout -b dev origin/dev
基于远程dev,创建本地分支名dev,然后 git branch -a
查看所有的分支
10.2 切换后删除分支
场景:想要删除本地分支A或则远程分支A
使用:当前本地分支为A,想要删除本地分支A。git checkout 分支B
切换到分支B,删除本地分支: git branch -d 分支A
, 如果删除不了想强制删除,git branch -D 分支A
, 而删除远程分支的话,使用git push origin :远程分支A
相当于 git push origin --delete 远程分支A
参考文章:
https://www.ruanyifeng.com/blog/2020/04/git-cherry-pick.html