“git rebase”如何跳过其更改已在上游中完成的提交?
说: 如果上游分支已经包含您所做的更改(例如,因为您邮寄了一个应用于上游的补丁),则将跳过该提交 但Git是如何做到这一点的 假设任何提交“git rebase”如何跳过其更改已在上游中完成的提交?,git,git-rebase,Git,Git Rebase,说: 如果上游分支已经包含您所做的更改(例如,因为您邮寄了一个应用于上游的补丁),则将跳过该提交 但Git是如何做到这一点的 假设任何提交X都是提交Y的父级,而diffXY是git diff X Y命令的结果。我有以下承诺: o---o---o <- master \ o---o---o---o <- test <- HEAD o--o--o2006年10月1.4.413日的 这将检查可从访问但不能从访问的所有修补程序,并将它们与正在生成的修补程序进行比
X
都是提交Y
的父级,而diffXY
是git diff X Y
命令的结果。我有以下承诺:
o---o---o <- master
\
o---o---o---o <- test <- HEAD
o--o--o2006年10月1.4.413日的
这将检查可从
访问但不能从
访问的所有修补程序,并将它们与正在生成的修补程序进行比较,任何匹配的修补程序都将被忽略
因此,它正在查看:请参阅以获取详细信息
“补丁ID”只不过是与补丁相关联的文件差异的SHA-1之和
补丁,忽略空白和行号。
因此,它“相当稳定”,但同时也相当独特,即具有相同“补丁ID”的两个补丁几乎保证是相同的东西
后来(Git 1.7.61011年2月)
并使用了--樱桃拣选
而不是--如果在上游则忽略
使用git格式补丁时——如果在上游,则忽略,我们只允许给出一个修订范围。
在下一次提交中,我们希望添加一个额外的排除修订,以便正确处理分叉点,因此将git-rebase--am
转换为使用对称
与<代码>--樱桃采摘--仅限右侧的区别
()
这不会改变“跳过相同提交”机制。给出了历史记录。机制就是Git所称的补丁ID。Git的补丁ID概念在中有记录(尽管有点轻描淡写),概括如下:
。。。您可以使用此功能查找可能的重复提交
这就是git rev list--cherry mark
(使用对称差异…
表示法)和git格式补丁--ignore if in upstream
(使用简单的排除。
操作)检测重复提交所做的。如果提交(其哈希定义不同于至少可能被复制的提交)与要复制的提交具有相同的补丁ID,Git假定提交已经被复制,因此不需要复制它
你还问:
另外,Git是否在重新应用测试提交到主机之前执行此跳过任务
是:首先生成要复制的提交列表,在此期间,将放弃与补丁ID等效的提交以及所有合并提交,除非您使用-p
或-r
选项,然后重新基础过程开始
(如果您使用使用git-am
的非自动git-rebase
,则rebase进程仍然使用git-format-patch
输出作为git-am
的输入。否则,要复制的提交哈希将存储在文件中,或者存储在sequencer中,后者可能存储在文件中,也可能不存储在文件中,然后选择提交,通过运行git cherry pick
或直接通过sequencer。细节取决于您特定的git年份。)我知道您将要发表评论。+1.您的手册页来自git 0.99.6(2005年8月):.cherry和format patch最初使用:
if (ignore_if_in_upstream &&
!get_patch_id(commit, &patch_id_opts, sha1) &&
lookup_object(sha1))
continue;