上面是合并和变基的结果。
我的问题是,在最终状态下,C5 和 C3' 是否相同?
或者说,git rebase
相当于 git merge
+ 删除 C3 吗?
上面是合并和变基的结果。
我的问题是,在最终状态下,C5 和 C3' 是否相同?
或者说,git rebase
相当于 git merge
+ 删除 C3 吗?
这个示例并不是很好,因为它只考虑了一个提交(合并或变基),给你留下了结果提交相似的印象。通常情况下,变基会添加多个提交,而合并最多只添加一个提交(快进式合并则不添加任何提交)。
此外,只要没有需要解决的冲突,或者您以相同的方式解决这些冲突,C3'和C5的最终内容将是相同的,但它们仍然是不同的提交(由于C3'和C5有不同的父级,它们还具有不同的哈希值,在下面的插图中更为明显)。相应地,每个提交的记录历史也是不同的。请注意,对于变基,历史是线性的,而对于合并,则是格子状结构。
考虑当合并/变基多个提交时的情况,如Mark Lodato的"A Visual Git Reference"所示。您会发现最终结果非常不同。
git checkout master
git merge other # update master with tip of branch 'other' changes
你只需要:
关于此图中工作目录和暂存区的含义,请注意箭头指向三方合并,然后指向工作目录和暂存区。工作目录代表你所看到的所有文件(在你的硬盘上),其中一些因为三方合并而更改。暂存区保存了三方合并更改的文件,然后用于创建新提交(f8bc5)。
这与rebase非常不同,rebase旨在将分支的每个提交都重新应用到目标分支之上:
git checkout topic # this time we are on topic
git rebase master # means: recreate every topic commits on top of master
at the end, we are still on (new) 'topic' branch
以上命令获取在'
topic
'中存在但在master
不存在的所有提交(即169a6
和2c33a
),将它们重新应用到master
上,然后将分支头移动到新的结尾。请注意,如果旧的提交不再被引用,它们将会被[最终]垃圾回收。
Rebasing使用工作目录和暂存区,当它重新应用提交时(将更改应用于工作目录、将更改添加到暂存区、提交已暂存的更改,重复)。完成所有操作后,重新定位分支的头到新提交中的最后一个(f7e63)。
另外还有2个不同之处:
不会。C5和C3'将有不同的父提交,这意味着它们本身将是不同的。
如果您问的是C5和C3'引用的根treeish是否相同,则是(假设任何冲突都以相同的方式解决)。换句话说,“包含”在两个提交中的文件的树将是相同的。
如果您只查看提交的内容(即不考虑它们的父级),那么C5和C3'都包含相同的内容(假设没有合并冲突或其他需要手动更改的内容)。因此,某人可以将其视为与删除C3相同,对于“删除C3”的定义而言。但是在Git中,无法删除任何提交(所有提交都是不可变的),因此从树中删除提交的操作对于Git来说是未定义的。
git reflog
(或者如果您记得提交哈希,则使用 git checkout
)来找回它。唯一删除提交的命令是 git gc
。 - Esko Luontolagit rebase
等于 git merge
+ 删除 C3 吗? - askergit commit -a --amend
。您正在尝试保留树形结构,因此添加工作目录中的所有更改并不是您想要的。但是,--amend
也无法让您更改父列表。您需要执行 git reset --soft HEAD^; git commit -c HEAD@{1}
来删除其他父提交。 - Jan Hudecgit branch -f experiment master
或者 git reset --hard master
,这不会添加/删除/修改任何提交。而git rebase master
相当于git checkout C5; git cherry-pick C3; git branch -f experiment
。 - Esko Luontola
git merge
还是git rebase
,当你执行git push
时,最终的结果是否相同?不过可能会丢失提交信息。 - askergit merge
或git rebase
之后,代码的最终状态是否相同?唯一的区别是提交对象不同吗? - TheOneTeamgit rebase
有其用途:请参见 https://dev59.com/qHRB5IYBdhLWcg3w9Lvn#457988 和 https://dev59.com/BXRA5IYBdhLWcg3w2xwI?lq=1 - VonC