Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“git rebase”如何跳过其更改已在上游中完成的提交?_Git_Git Rebase - Fatal编程技术网

“git rebase”如何跳过其更改已在上游中完成的提交?

“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日的 这将检查可从访问但不能从访问的所有修补程序,并将它们与正在生成的修补程序进行比

说:

如果上游分支已经包含您所做的更改(例如,因为您邮寄了一个应用于上游的补丁),则将跳过该提交

但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日的

这将检查可从
访问但不能从
访问的所有修补程序,并将它们与正在生成的修补程序进行比较,任何匹配的修补程序都将被忽略

因此,它正在查看:请参阅以获取详细信息

“补丁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;