【问题标题】:make git branch ffwd-able again after adding unrelated file?添加无关文件后再次使 git branch ffwd-able?
【发布时间】:2021-05-29 16:32:54
【问题描述】:

我有一个本地 master 分支,跟踪 origin/master,它在某个时候是从(假设)upstream/stable 分叉的。当更改可用时,我可以从upstream/stable 提取/合并,然后将这些更改发送到origin/master。一切都很好。

现在,我在upstream/stable 中的文件中添加了一个不相关的文件,突然我的分支无法快速转发。

我可以从upstream/stable 合并(导致烦人的合并提交)并推送到origin/master,但我怀疑,鉴于合并提交,我的本地master 分支仍然无法从@ ffwd-able 987654330@ 之后。 即使有时我不再向master 进行任何进一步的本地提交(但仍想不断从upstream 更新origin)。

再见upstream和origin之间的轻松穿梭;你好讨厌的祖先结构(我已经看到重复合并在树视图中的样子)和无用的合并提交。

我什至不知道如何对此进行试验,因为我没有看到将 upstream/stable 中的逐个提交合并的方法,只能一直到它的提示。

我知道merge --rebase,但这当然会重写本地历史记录,当本地master 不断同步到origin/master 时,这将不起作用。

怎么办?

【问题讨论】:

    标签: git workflow git-merge git-remote


    【解决方案1】:

    如果您的分支包含另一个分支没有的更改[1],则您永远不能将您的分支快进到另一个分支。您的更改是在同一个文件中还是在不同文件中都没有关系;改变就是改变。

    有些人(你听起来像是其中之一)将对合并提交的仇恨置于所有其他问题之上;对他们来说,有git rebase[2]。每次从上游获得新的更改时,您都可以将本地 master 重新定位在它们之上,而不是将它们合并。基本上,您的 master 将在任何时间点看起来就像您在整个上游快进分支和 then 在它之上进行了本地更改。没有合并提交。但是:

    这意味着,正如您所指出的,您的 master 分支以非快进方式移动。这与 git 中的正常意图相反,因此这意味着在每次变基后,您必须强制将 master 推送到 origin/master。如果您的存储库是共享的,您将必须与所有其他用户协调每一次强制推送,否则他们有可能在尝试修复导致的错误时撤消您的更改。您可以在“从上游变基中恢复”下的 git rebase 文档中阅读有关此问题的更多信息。 https://git-scm.com/docs/git-rebase


    [1] git 中的快进意味着您只需将您的分支移动到与另一个分支相同的提交,而不是合并,因为它与合并的结果相同。如果你的分支有变化,那么结果就不一样了,快进根本不可能。

    [2] 我应该注意到git rebase 有很多很好的用途;我并不是说它只对我认为历史管理优先级较差的人有用。但它是该阵营中的人们可以用来获取他们认为应该拥有的简单历史的主要工具。

    【讨论】:

    • 我已经做了一段时间的合并提交(我的问题是一个简化版本)。今天看tig中的树结构。可怕。另外这些人为的合并提交背后没有现实——至少对于没有干预本地更改的重复提交来说不是这样。在 git 之前,darcs 过去在交换补丁方面要聪明得多,但 darcs 很慢而且已经死了很长时间。
    猜你喜欢
    • 1970-01-01
    • 2021-07-09
    • 2014-09-25
    • 1970-01-01
    • 2012-01-14
    • 2011-10-18
    • 2019-08-20
    • 2021-09-15
    • 1970-01-01
    相关资源
    最近更新 更多