我做了以下内容:如何与git摘樱桃承诺,宣布我们的历史包含它
git fetch upstream
git cherry-pick xyz
拾取提交了它有完全相同我已经同变化中的一个文件被除明确应用在之前的提交中完成,因此这些更改不会重新应用。
在代码方面的一切都很好,但我想在我的历史中有提交散列。在我的历史中,它以一个新的名字出现。这甚至有可能吗?至于我读git合并“我们”的策略,似乎一般可能,但如何做到一次提交?
我想要这个,以便稍后确定upstream
有什么提交我没有。目前在github network
视图我看到樱桃挑选的提交作为单独的东西,我没有。
附加信息: @CharlesB说什么对我有意义。但是merge -s ours
怎么做呢?在这种情况下,对我来说cherry-pick
并不重要。因为我想采取的变化只有一个,并且在upstream/master
的顶端。所以,只是尝试一下,我所做的:git merge -s ours upstream/master
现在做git log --graph --pretty=oneline --abbrev-commit
我看到:
* 9e8108b Merge remote-tracking branch 'mgencur/master' for better github netw
|\
| * aa7117d Fix displaying watchers/watching for incorrect user // this commit magically appeared after merge -s ours
* | ff05f8c Fix displaying watchers/watching for incorrect user // this is commit from cherry-pick of aa7117d
* | b7ca8ec older commit in my fork
* | <more commits in my fork>
|/
* 94d6870 Fix obtaining available users for testing purposes
* <older commits of upstream/master>
同样的命令以前git merge -s ours
一直在寻找这样的:
* ff05f8c Fix displaying watchers/watching for incorrect user // this is commit from cherry-pick of aa7117d
* b7ca8ec older commit in my fork
* <more commits in my fork>
* 94d6870 Fix obtaining available users for testing purposes
* <older commits of upstream/master>
,你可以看到挑选aa7117d提交后,没有迹象表明aa7117d已经应用于我的fork回购。但合并后,它表明它在那里,虽然我的文件没有改变。
这使我认为确实有可能声明包含在分支中的许多提交,尽管它们不适用于,因为它们在上游应用了。
update2:我看到问题How to merge a specific commit in Git及其最佳答案。因此,解释为什么它不可能实现还是没有实现。
你似乎是在什么摘樱桃和合并是困惑。前者将指定的提交应用于当前分支。这就像导出补丁文件然后应用它的捷径。而已。后者也创建一个新的提交,但那个**有两个父提交**。因此,在另一个分支之上没有提交*补丁*,更像是将开发链合并为一个。这就是为什么你会在历史中看到原始的哈希字符串,但那只是因为它们确实仍然存在,而不是从原始状态修改而来。 – 2013-03-05 15:09:22
@迈克尔 - 野,是啊,我想某种合并/摘樱桃组合。 – akostadinov 2013-03-05 15:26:41
这将永远不会工作。这不仅仅是Git的工作原理。散列唯一标识一个提交,如果你改变它的父提交,散列必须改变。这就是为什么提交哈希在Git中被认为是*加密安全*的原因。如果您可以验证分支机构的散列,则可以有效验证其整个历史记录。任何修改历史记录的操作都会改变哈希值。期。 – 2013-03-05 15:35:04