gpt4 book ai didi

git - git 中跨分支的等效更改的簿记清理

转载 作者:太空狗 更新时间:2023-10-29 13:26:54 26 4
gpt4 key购买 nike

我正在尝试清理大量主题分支,主要是为了 master 的分支概述由于存在相同的更改,在 github 中不再在不活动的主题分支中显示虚假的“n ahead”指示符。

如果没有这些虚假的指标,这个概览页面将提供一个很好的方式来一目了然地查看是否有来自旧主题分支的任何提交被无意中遗漏并且没有 merge 回 master 中。 .

在下图中,Y是分支中的提交 topic后来应用于master作为Y' (因此它们具有不同的 sha1 哈希值,但具有相同的补丁 ID)。

A --- B --- C --- Y' --- E    <-- master
\
X --- Y <-- topic

git cherry master topic适当报告:

- Y

但是如果我尝试通过发出 git merge topic 来清理它来自 master , 自更改后我遇到了 merge 冲突 Emaster此后改变了应用补丁的上下文。

有没有办法告诉master “嘿,你真的有Y了,所以你可以停止报告你没有。”? (能够以自动/以编程方式应用的方式执行此操作是关键。)

最佳答案

通过将 --cherry-pick 选项传递给 git log,您可以看到分支之间修订的有效差异。

我最喜欢的咒语运行:

git log --left-right --graph --cherry-pick --oneline branch1...branch2

(我的别名git lr)。

来自 the man page :

--cherry-pick 

Omit any commit that introduces the same change as another commit on the "other side" when the set of commits are limited with symmetric difference.

For example, if you have two branches, A and B, a usual way to list all commits on only one side of them is with --left-right (see the example below in the description of the --left-right option). It however shows the commits that were cherry-picked from the other branch (for example, "3rd on b" may be cherry-picked from branch A). With this option, such pairs of commits are excluded from the output.

--cherry-mark 

Like --cherry-pick (see below above) but mark equivalent commits with = rather than omitting them, and inequivalent ones with +.


永久解决方案#1

为了永久地让 git 不再担心实际上是精心挑选的提交,您总是可以 merge 另一个分支。 merge 提交将被标记为先前提交和 merge 修订树的尖端子修订

这告诉修订树遍历在那个点停止遍历历史。这样做只有在 merge 来自“其他”分支的修订版 IFF 时才安全,如果您 ** 知道它的所有父级已被 merge (就您希望它们 merge 而言)。

永久解决方案 #2

还有一些way to use grafts .这真的意味着你会告诉 git - out of band 1 - 某个修订版本是另一个修订版本的子版本,而不必实际 rebase 到它/从它 merge 。

<子> 1例如,带有成对的 sha1 散列的手写文件:)

积极的一面是,您不必重写历史就可以让它工作。但是,如果您愿意,可以使用 git filter-branch to make the grafts permanent .那时您不再需要 grafts 文件,但是当然,您将不得不重写历史记录(并且可能使已发布的修订 ID 无效)。

<子>

未完待续?

如果其他所有方法都失败了,有时您可能会被经常想要 merge 的远程(主题)分支所困,但有些差异是您根本不想接受的。这些可能会一遍又一遍地导致相同的 merge 冲突。

在这种情况下,我将指向 git-rerere (Reuse recorded resolution of conflicted merges)这可以使生活变得更加轻松,尽管更加复杂

关于git - git 中跨分支的等效更改的簿记清理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6631649/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com