Git 用得好,下班走得早

B站影视 港台电影 2025-09-10 04:49 1

摘要:官方解释:当您想记录工作目录和索引的当前状态,但又想返回一个干净的工作目录时,请使用 git stash。该命令将保存本地修改,并恢复工作目录以匹配头部提交。

官方解释:当您想记录工作目录和索引的当前状态,但又想返回一个干净的工作目录时,请使用 git stash

。该命令将保存本地修改,并恢复工作目录以匹配头部提交。

比如某一天你正在自己的分支上开发你的新需求,突然被测试同学提了一个线上 bug,必须马上修复。而此时你的功能开发到一半,于是你急忙的想切换到另一个分支上进行修改,然后你就会看到以下报错。

error: Your local changes to the following files would be overwritten by checkout: src/pages/xxxx/index.tsxPlease commit your changes or stash them before you switch branches.Aborting

#技术分享因为当前有文件更改了,需要提交 commit 保持工作区干净才能切换分支。由于情况紧急,你就急忙 commit 上去。commit 信息也就随便写了个“暂存代码”,于是该分支提交记录就留了一条无用的记录。而有了 stash 你只需要

git stashgit checkout xxxxgit stashgit stash save "备注的内容"git stash listgit stash cleargit stash applygit stash popgit stash dropgit stash list stash@{0}: WIP on ... stash@{1}: WIP on ... stash@{2}: On ...$ git stash apply stash@{1}

用于回退版本。可以指定退回某一次提交的版本。

接着上面的场景,你修改完了代码。准备提交却发现了一些问题需要回退一下提交,那么这个时候就需要用到 git reset 这个命令了

git reset 分为三种:软 --soft,中 --mixed,硬 --hard 对应三种回滚程度,程度越硬,回滚越狠。

git reset --soft HEAD^git reset HEAD^git reset --hard~3 git reset --hard~ngit reset --hard HEAD^ git reset --hard HEAD^^git reset --hard xxxxxx

此命令用来管理引用日志(reflog)。引用日志会记录在本地仓库里,分支的指针和其他引用在什么时候被更新过

继续上面的场景,你学会了 git reset 来回滚你的代码,但是你只是想修改一下 commit message 但一不小心用了最狠的 --hard,你的代码全都消失不见了。此时 该怎么办呢,别担心如果 reset 被称为后悔药的话那么 reflog 就是后悔药中的后悔药,它记录了你所有的操作信息。

这时 log 信息如下

不小心回退到 C 之后会发现 A 、B 的 commit 记录都没有了。最新的记录变成 C 了

那么这个时候就可以用 reflog 了

就能找到我们所有的提交记录了,发现 c2c8086 就是我们最新提交的 commit ,我们 reset 到最新的那个 commit 后再次 log,就发现记录都回来了

某天你们的项目同时有两个迭代并行开发,但是两个迭代都有依赖同一个功能,那么你可能会再这个分支上完成这个功能,然后将这些代码再 copy 到另一个分支上。但是有了 cherry-pick 你就不需要再做重复的工作了。

通过 cherry-pick 命令,Git 可以将任何分支中的选定提交合并到当前的 Git HEAD 分支中。在执行 git merge 或 git rebase 时,一个分支的所有提交都会被合并。而 cherry-pick 命令则允许你选择单个提交进行整合。

使用 merge 的情况: 在执行 merge 或 rebase 时,一个分支的所有提交都会被整合。

使用 cherry-pick 的情况: 允许你选择个别提交进行整合。只有 C2 被整合到主分支,而不是 C4。

拉取本地分支。使用 git fetch。回到要合并的分支。你可能会通过运行 git checkout dev。找到要拉入分支的提交。转到 git log,为每条提交获取唯一的提交哈希值。"Cherry-pick" 您想要加入该分支的提交。运行以下命令:git cherry-pick {commit sha}。这将只把这个提交拉入当前分支。(可选) 在某些情况下, 可能需要手动解决冲突.像往常一样推送这个分支: git push。vim ~/.gitconfig[alias] co = checkout ps = push pl = pull

来源:墨码行者

相关推荐