头图
作为一名开发人员,不管走到哪里可能都会和代码仓库发生不可描述的关系,从clone仓库 => 新的功能分支 => 开发功能完成后提交 => 分支合并(解决冲突) => 打上标签 => 部署到线上环境,这一系列操作都离不开这个代码版本管理工具Git,所以常见命令烂熟于心有助于我们提升效率。

克隆git仓库

gitlab或者github有有两种克隆方式,ssh协议和http协议。使用http只要输入用户名和密码即可,使用ssh是要部署自己的公钥到gitlab或者github上,在登录用户的设置里边配置。查询自己的公钥,一般在自己电脑的以下目录:

➜  ~ cd .ssh
➜  .ssh ls
id_rsa      id_rsa.pub  known_hosts

公钥就是id_rsa.pub这个文件中的内容,部署好之后就可以去克隆仓库了。

分支操作

什么是分支?

Git 可以把我们的代码库划分出不同的分支,这样在开发的过程中每个功能都可以相互独立。

有了分支,我们就可以在一个代码仓库的不同版本中开展工作,比如开发功能,修复bug都可以同时进行。

git checkout -b

好的,听说你已经把名为Blog的仓库克隆到本地,现在Leader安排你做一个评论的功能,那么从终端进入项目一般是这个样子:

➜  Blog git:(main)

假如生产环境部署的是main分支或者叫master,那么新的功能应该从这个主分支检出。

➜  Blog git:(main) git checkout -b comment
Switched to a new branch 'comment'

* comment
  ele
  main

git status / git add / git commit

到这里就可以在这个分支上做你的功能了。当你写到兴起的时候,突然Leader告诉你线上有个问题急需要修复。你看似稳如老狗,实则慌得一匹。不过无论如何 用脚都能想到 要先保存你做了一半的评论功能。于是你使用了以下命令:

➜  Blog git:(comment) ✗ git status
On branch comment
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
    modified:   README.md

no changes added to commit (use "git add" and/or "git commit -a")

// 看到了熟悉的内容改动,表示放心,使用下面的命令把它们纳入到版本管理
➜  Blog git:(comment) ✗ git add .
➜  Blog git:(comment) ✗ git commit -m "comment progress 50%"
[comment 006a55d] comment progress 50%
 1 file changed, 1 insertion(+), 1 deletion(-)

git log / git reset

这样做固然可以,但是产生了一次提交记录,其实还可以把你的修改先暂存起来,现在我们把这次提交重置掉,要进行重置我们需要知道上一个版本号:

➜  Blog git:(comment) git log --oneline

006a55d (HEAD -> comment) comment progress 50%
2bf17f8 (origin/main, origin/HEAD, main) loading
56131ba 优化样式
cc91d8c abstract
a81dbe7 sitemap
b915f65 baidu

可以看到我们只要重置2bf17f8这一次就好了,但是注意需要保留辛苦写的 代码(bug)。于是机智的使用了下面命令:

➜  Blog git:(comment) git reset --mixed 2bf17f8
Unstaged changes after reset:
M    README.md
➜  Blog git:(comment) ✗ git status
On branch comment
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
    modified:   README.md

愉快的回到了未提交之前的状态。如果你使用git reset --hard 2bf17f8,那么就要恭喜了,之前的改动就全部丢失了,所以一定要慎重。

git stash

为了减少一次无用的提交,我们使用git stash来暂存未完成的评论功能:

➜  Blog git:(comment) ✗ git stash
Saved working directory and index state WIP on comment: 2bf17f8 loading
// 可以看到是以上次提交的信息记录本次stash的内容

接下来就可以处理Leader安排的紧急任务了,从主分支切出hot_fix分支

➜  Blog git:(main) git checkout -b hot_fix
Switched to a new branch 'hot_fix'

问题修复后保存提交:

➜  Blog git:(hot_fix) ✗ git add .
➜  Blog git:(hot_fix) ✗ git commit -m "bug fixed"

git merge

切换分支到main合并hot_fix

➜  Blog git:(hot_fix) git checkout main
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
➜  Blog git:(main) git merge hot_fix
Updating 2bf17f8..b85e853
Fast-forward
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

到这里,就可以从main分支发布新的版本到线上了,并且修复了线上的紧急问题。这时你的本地出现了没有用的分支hot_fix:

➜  Blog git:(main) git branch
  comment
  ele
  hot_fix
* main

现在可以把它删除掉了,使用命令:

➜  Blog git:(main) git branch -d hot_fix
Deleted branch hot_fix (was b85e853).

假如之前你还把它推送到了远程,查看所有远程分支:

➜  Blog git:(main) git branch -r
  origin/HEAD -> origin/main
  origin/ele
  origin/hot_fix
  origin/main
(END)

那现在远程的分支也没有任何用途了,使用下面命令删除远程分支:

➜  Blog git:(main) git push origin -d hot_fix
To github.com:iicoom/Blog.git
 - [deleted]         hot_fix

现在又重新回到清爽的状态,可以重新回到comment分支完成之前的功能:

➜  Blog git:(main) git checkout comment
Switched to branch 'comment'

// 把之前暂存的内容恢复
➜  Blog git:(comment) git stash pop
On branch comment
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
    modified:   README.md

no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (0553a4fa89f44ea5708a21d5c421c7b1115c40cb)

又可以happy的coding了。本文通过一个场景,重现了在实际工作中一些git命令的使用,希望对你有帮助。

上边的操作如果是日常装逼必备,那么下一篇打算来点刺激的,不知道的人遇到一般都会慌得一匹~

Git日常装逼手册(二)· 误删分支恢复 git reflog


来了老弟
508 声望31 粉丝

纸上得来终觉浅,绝知此事要躬行