阅读本文大概需要 8 分钟。
官方解释:当您想记录工作目录和索引的当前状态,但又想返回一个干净的工作目录时,请使用git stash。该命令将保存本地修改,并恢复工作目录以匹配头部提交。
git stash
复制代码
git stash apply
复制代码
# 保存当前未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
复制代码
$ git stash list
stash@{0}: WIP on ...
stash@{1}: WIP on ...
stash@{2}: On ...
复制代码
$ git stash apply stash@{1}
复制代码
完全不接触索引文件或工作树(但会像所有模式一样,将头部重置为)。这使您的所有更改的文件更改为“要提交的更改”。
git reset \--hard
会被提及的比较多,它能让 commit 记录强制回溯到某一个节点。而 git reset \--soft
的作用正如其名,--soft
(柔软的) 除了回溯节点外,还会保留节点的修改内容。reset \--soft
之后,你只需要:# 恢复最近一次 commit
git reset --soft HEAD^
复制代码
reset \--soft
相当于后悔药,给你重新改过的机会。对于上面的场景,就可以再次修改重新提交,保持干净的 commit 记录。git push \-f
来覆盖被 reset 的 commit。reset \--soft
指定 commit 号时,会将该 commit 到最近一次 commit 的所有修改内容全部恢复,而不是只针对该 commit。git reset --soft 1a900ac29eba73ce817bf959f82ffcb0bfa38f75
复制代码
给定一个或多个现有提交,应用每个提交引入的更改,为每个提交记录一个新的提交。这需要您的工作树清洁(没有从头提交的修改)。
cherry-pick
把 b 应用到当前分支。cherry-pick
多个 commit 要如何操作。git cherry-pick commit1 commit2
复制代码
git cherry-pick commit1^..commit2
复制代码
cherry-pick
多个commit时,可能会遇到代码冲突,这时 cherry-pick
会停下来,让用户决定如何继续操作。下面看看怎么解决这种场景。cherry-pick
。可以看到 c 被成功复制,当进行到 d 时,发现代码冲突,cherry-pick
中断了。这时需要解决代码冲突,重新提交到暂存区。cherry-pick \--continue
让 cherry-pick
继续进行下去。最后 e 也被复制进来,整个流程就完成了。cherry-pick
:gits cherry-pick --abort
复制代码
cherry-pick
:git cherry-pick --quit
复制代码
cherry-pick
成功的 commit,并退出 cherry-pick
流程。给定一个或多个现有提交,恢复相关提交引入的更改,并记录一些这些更改的新提交。这就要求你的工作树是干净的(没有来自头部的修改)。
git revert 21dcd937fe555f58841b17466a99118deb489212
复制代码
通常无法 revert 合并,因为您不知道合并的哪一侧应被视为主线。此选项指定主线的父编号(从1开始),并允许 revert 反转相对于指定父编号的更改
git revert -m 1
复制代码
此命令管理重录中记录的信息。
reset \--soft
是后悔药,那 reflog 就是强力后悔药。它记录了所有的 commit 操作记录,便于错误操作后找回记录。reset \--hard
,结果紧张不小心记错了 commitHash,reset 过头,把同事的 commit 搞没了。没办法,reset \--hard
是强制回退的,找不到 commitHash 了,只能让同事从本地分支再推一次(同事瞬间拳头就硬了,怎么又是你)。于是,你的技术形象又一落千丈。git reflog
查看历史记录,把错误提交的那次 commitHash 记下。git config --global alias.ps push
复制代码
vim ~/.gitconfig
复制代码
[alias]
co = checkout
ps = push
pl = pull
mer = merge --no-ff
cp = cherry-pick
复制代码
# 等同于 git cherry-pick
git cp
复制代码
stash
:存储临时代码。reset --soft
:软回溯,回退 commit 的同时保留修改内容。cherry-pick
:复制 commit。revert
:撤销 commit 的修改内容。reflog
:记录了 commit 的历史操作。—— EOF —— 你好,我是飞宇,本硕均于某中流985 CS就读,先后于百度搜索以及字节跳动电商等部门担任Linux C/C++后端研发工程师。
最近跟朋友一起开发了一个新的网站:编程资源网,已经收录了不少资源(附赠下载地址),如果屏幕前的靓仔/女想要学习编程找不到合适资源的话,不妨来我们的网站看看,欢迎扫码下方二维码白嫖~
同时,我也是知乎博主@韩飞宇,日常分享C/C++、计算机学习经验、工作体会,欢迎点击此处查看我以前的学习笔记&经验&分享的资源。
我组建了一些社群一起交流,群里有大牛也有小白,如果你有意可以一起进群交流。
欢迎你添加我的微信,我拉你进技术交流群。此外,我也会经常在微信上分享一些计算机学习经验以及工作体验,还有一些内推机会。
加个微信,打开另一扇窗