git部分高级用法

朱治龙
2019-04-13 / 0 评论 / 60 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2021年05月10日,已超过1339天没有更新,若内容或图片失效,请留言反馈。

git.png

Rebase 合并

该命令可以让和 merge 命令得到的结果基本是一致的。

通常使用 merge 操作将分支上的代码合并到 master 中,分支样子如下所示:
git-merge.png
使用 rebase 后,会将 develop 上的 commit 按顺序移到 master 的第三个 commit 后面,分支样子如下所示:
git-rebase.png
rebase 对比 merge,优势在于合并后的结果很清晰,只有一条线,劣势在于如果一旦出现冲突,解决冲突很麻烦,可能要解决多个冲突,但是 merge 出现冲突只需要解决一次。

使用 rebase 应该在需要被 rebase 的分支上操作,并且该分支是本地分支。如果 develop 分支需要 rebasemaster 上去,那么应该如下操作

## branch develop
git rebase master
git checkout master
## 用于将 `master` 上的 HEAD 移动到最新的 commit
git merge develop

stash

stash 用于临时保存工作目录的改动。开发中可能会遇到代码写一半需要切分支打包的问题,如果这时候你不想 commit 的话,就可以使用该命令。

git stash

使用该命令可以暂存你的工作目录,后面想恢复工作目录,只需要使用

git stash pop

这样你之前临时保存的代码又回来了

reflog

reflog 可以看到 HEAD 的移动记录,假如之前误删了一个分支,可以通过 git reflog 看到移动 HEAD 的哈希值
git-reflog.png
从图中可以看出,HEAD 的最后一次移动行为是 merge 后,接下来分支 new 就被删除了,那么我们可以通过以下命令找回 new 分支

git checkout 37d9aca
git checkout -b new

PS:reflog 记录是有时效性的,只会保存一段时间内的记录。

reset

如果你想删除刚写的 commit,就可以通过以下命令实现

git reset --hard HEAD^

但是 reset 的本质并不是删除了 commit,而是重新设置了 HEAD 和它指向的 branch。

0

评论 (0)

取消