新增git常用命令

pull/4/head
liruyu 2 years ago
parent 6eaba019ab
commit d61eb0ea00

@ -3015,7 +3015,183 @@ $ git revert [commit]
## 特殊命令
## 高效命令
### 存储临时代码(stash)
当您想记录工作目录和索引的当前状态但又想返回一个干净的工作目录时请使用git stash。该命令将保存本地修改并恢复工作目录以匹配头部提交。stash 命令能够将还未 commit 的代码存起来,让你的工作目录变得干净。
**应用场景**
某一天你正在 feature 分支开发新需求突然产品经理跑过来说线上有bug必须马上修复。而此时你的功能开发到一半于是你急忙想切到 master 分支然后你就会看到报错。因为当前有文件更改了需要提交commit保持工作区干净才能切分支。由于情况紧急你只有急忙 commit 上去commit 信息也随便写了个“暂存代码”,于是该分支提交记录就留了一条黑历史。
**常用命令**
```shell
# 保存当前未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
```
当有多条 stashpop、drop同理可以指定操作stash
```shell
# 使用stash list 列出所有记录
$ git stash list
stash@{0}: WIP on ...
stash@{1}: WIP on ...
stash@{2}: On ...
# 应用第二条记录
$ git stash apply stash@{1}
```
### 软回溯(reset --soft)
软回溯,回退 commit 的同时保留修改内容。回退你已提交的 commit并将 commit 的修改内容放回到暂存区。
**应用场景**
回溯节点,为什么要保留修改内容?
- 应用场景1有时候手滑不小心把不该提交的内容 commit 了,这时想改回来,只能再 commit 一次,又多一条“黑历史”
- 应用场景2规范些的团队一般对于 commit 的内容要求职责明确,颗粒度要细,便于后续出现问题排查。本来属于两块不同功能的修改,一起 commit 上去,这种就属于不规范。这次恰好又手滑了,一次性 commit 上去
**命令使用**
```shell
# 恢复最近一次 commit
git reset --soft HEAD^
# 恢复到指定commit
git reset --soft 1a900ac29eba73ce817bf959f82ffcb0bfa38f75
```
### 复制commit(cherry-pick)
给定一个或多个现有提交,应用每个提交引入的更改,为每个提交记录一个新的提交。这需要您的工作树清洁(没有从头提交的修改)。将已经提交的 commit复制出新的 commit 应用到分支里。
**应用场景**
commit 都提交了,为什么还要复制新的出来?
- 应用场景1有时候版本的一些优化需求开发到一半可能其中某一个开发完的需求要临时上或者某些原因导致待开发的需求卡住了已开发完成的需求上线。这时候就需要把 commit 抽出来,单独处理。
- 应用场景2有时候开发分支中的代码记录被污染了导致开发分支合到线上分支有问题这时就需要拉一条干净的开发分支再从旧的开发分支中把 commit 复制到新分支。
**命令使用**
```shell
# 一次转移单个提交
git cherry-pick commit1
# 一次转移多个提交
git cherry-pick commit1 commit2
# 多个连续的commit也可区间复制
git cherry-pick commit1^..commit2
# 放弃 cherry-pick
git cherry-pick --abort
# 退出 cherry-pick
git cherry-pick --quit
```
### 撤销commit的修改内容(revert)
给定一个或多个现有提交,恢复相关提交引入的更改,并记录一些这些更改的新提交。这就要求你的工作树是干净的(没有来自头部的修改)。将现有的提交还原,恢复提交的内容,并生成一条还原记录。
**应用场景**
应用场景:有一天测试突然跟你说,你开发上线的功能有问题,需要马上撤回,否则会影响到系统使用。这时可能会想到用 reset 回退,可是你看了看分支上最新的提交还有其他同事的代码,用 reset 会把这部分代码也撤回了。由于情况紧急,又想不到好方法,还是任性的使用 reset然后再让同事把他的代码合一遍同事听到想打人于是你的技术形象在同事眼里一落千丈。
**命令使用**
```shell
# 撤销指定的commit
git revert 21dcd937fe555f58841b17466a99118deb489212
```
### 设置Git短命令
对喜欢敲命令而不用图形化工具的爱好者来说,设置短命令可以很好的提高效率。下面介绍两种设置短命令的方式:
**方式一**
```shell
git config --global alias.ps push
```
**方式二**
打开全局配置文件
```shell
vim ~/.gitconfig
```
**写入内容**
```properties
[alias]
co = checkout
ps = push
pl = pull
mer = merge --no-ff
cp = cherry-pick
```
**使用**
```shell
# 等同于 git cherry-pick <commitHash>
git cp <commitHash>
```

Loading…
Cancel
Save