标签:跳过 排列 处理 存储 head 操作 contain 常用 img
git merge --squash 和 git merge是不同的。后者是直接将其他的提交记录合并进来。而前者是内容的合并。
这里的分支名可以是远程的也可以是本地的分支
现在我们dev分支上开发了某个功能。并提交至远程仓库中。我们现在打算合入master分支中。
dev 和 master 两个分支已经很久没有合并了。此时合并可能会有冲突
dev代码提交远程
git status
也可以看到这两个文件冲突 both modified
我们发现dev提交的test甚至之前的commit并没有在master里面。这就是squash与merge的不同之处了
squash是将其他分支内容合并和重新进行一次提交封装。这样方便我们对主分支的管理。dev分支开发可能会随心所欲的进行提交已经对提交日志的细小记录。但是对于主分支根本不关心这些或者需要进行一些提交信息的规则定义。这时候我们可以squash先合并内容然后在重新一次性提交
此时rebase_dev 和 master是完全一样的。
现在我们在rebase_dev 分支上修改一个文件并commit。我们在看看commit log如何
这个时候master和rebase_dev两个分支分别向前推进了2步。
我们先来整理下master推进了两个commit. rebase_dev推进了两个分支
在上面我们何如了第一个commit后,突然不想rebase此次操作了。我们可以git rebase --abort停止。此时当前分支回到rebase之前状态。即基点在8ad6924。且自己的两个commit还在。
现在我们执行在rebase_dev分支上执行git rebase master 后看看效果
图中大意是重新设置基点,并将存储在./git/rebase中的patch进行添加到当前分支上。
首先合并第一个commit patch, 里面涉及改动了trace.txt。我们有三种方式进行合并。git自动已经帮我们合并了,就是我们常见的冲突形式。我们也可以通过git am --show-current-patch
查看冲突细节。当我们已经认定解决冲突后我们git add 重新添加或者git rm删除文件。然后执行git rebase --continue
进行放行至下一个commit。或者执行git rebase --skip
跳过当前的commit.实际上就是丢弃该commit。或者执行git rebase --abort
停止当前rebase回到之前状态
我们执行git rebase --abort
停止了当前的基点改变。我们查看源文件发现没有冲突也没有被主分支内容改动。
下面我们git rebase master将内容合并进来。
git rebase -i HEAD~4
标签:跳过 排列 处理 存储 head 操作 contain 常用 img
原文地址:https://www.cnblogs.com/zhangxinhua/p/14535480.html