6

我做了以下事情:

git fetch upstream
git cherry-pick xyz

选择的提交已被干净地应用,只是在其中一个文件中它具有与我在之前的提交中所做的完全相同的更改,因此不会重新应用这些更改。

代码方面的一切都很好,但我想在我的历史中拥有提交哈希。在我的历史中,它以一个新名字出现。这甚至可能吗?就我正在阅读 git merge “我们的” 策略而言,它似乎通常是可能的,但如何为单个提交做到这一点?

我想要这个,以便以后更容易识别提交所做upstream的事情我没有。目前在 githubnetwork视图中,我认为精心挑选的提交是我没有的独立的东西。

附加信息:@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:我看到了如何在 Git 中合并特定提交及其最佳答案的问题。因此,也将不胜感激解释为什么它不可能或未实施。

4

2 回答 2

4

根据定义,提交哈希对于每个提交都是唯一的。

挑选樱桃时,您正在创建一个新的提交,即使您应用了相同的修改,因为它具有不同的父提交。

但是,您可以添加 ask git 以将消息放入精心挑选的提交消息中:

从提交中挑选<original-sha1>

文档中:

-X

记录提交时,在原始提交消息中附加一行“(cherry pick from commit ...)”,以指示此更改是从哪个提交中挑选出来的。这仅适用于没有冲突的樱桃采摘。如果您从您的私人分支中挑选,请不要使用此选项,因为该信息对收件人无用。另一方面,如果您在两个公开可见的分支之间进行挑选(例如,将修复从开发分支向后移植到维护分支以获取旧版本),添加此信息可能很有用。

于 2013-03-05T09:54:21.233 回答
3

Git 不允许你这样做。Git 哈希唯一标识一个提交及其所有历史。这意味着,当您选择一个提交时,您将补丁应用到另一个历史记录,因此没有办法(除非在哈希冲突的某些异常情况下)哈希是相同的。

执行合并时仍然看到原始哈希数的原因是这里的情况完全不同。合并不是具有单个父提交的正常提交。相反,它有两个(甚至更多)父提交,将单独的开发链组合在一起。因此,保留了合并头的原始历史。

于 2013-03-05T19:51:51.323 回答