git - 以下 Git 提交策略正确吗?

标签 git git-merge git-commit merge-conflict-resolution

我刚刚使用 Git 完成了以下操作,但我不确定这是否是正确的操作方式。我所拥有的是一个包含一些内容的文件。然后有一个分支向该文件添加额外的内容(扩展它,它是我们单独销售的插件)。假设branch1和branch2有一个包含以下内容的文件:

-----------
branch1
-----------
123

-----------
branch2
-----------
123
qwe
-----------

然后我对branch1 中的一个主要功能做了一些工作,并提交到该分支。之后,我将branch1 merge 到branch2中,以将这个新功能重新应用到文件的插件版本中。现在文件是

-----------
branch1
-----------
1234

-----------
branch2
-----------
1234
qwe
-----------

但是代码并不能完全工作,我现在需要切换到branch2并对扩展该文件的代码进行一些更改(将“qwe”更改为“qwer”)。然而,在工作时,我还发现基本代码(“1234”)中存在一些错误并修复它们(将“1234”更改为“12345”)。现在我的工作目录(HEAD 位于branch2)具有以下内容

-----------
branch2 (working directory)
-----------
12345
qwer
-----------

现在我需要提交这个,我想要的结果是

-----------
branch1
-----------
12345

-----------
branch2
-----------
12345
qwer
-----------

我担心,如果我只是将其提交到branch2,然后分别将1234->12345更改重新应用到branch1并提交,这将产生我正在寻找的结果,但Git会将其识别为两个独立且完全的独立提交,当我将来经历类似的过程时(例如,branch1 中的 12345->123456,然后branch1->branch2 merge ),我会在那个地方遇到冲突。所以我的解决方案是使用交互式暂存仅将 qwe->qwer 更改提交到branch2。然后存储剩余的更改(否则不允许切换回branch1),切换到另一个分支,应用存储,将1234->12345提交到branch1,最后 merge branch1->branch2。

这确实起到了作用,但是由于我对 Git 比较陌生,我不太确定我是否正确并以最佳方式使用了东西。请让我知道上述内容是否有意义,如果没有,请告诉我更好的方法。

最佳答案

我觉得你的做法很合理。不过,我会采取不同的做法:

  1. 一旦我看到基本代码中的错误,就 stash 并切换到branch1,并在那里修复它们。 测试、完善、提交。

  2. 将旧的分支 1 merge 到分支 2 中,并使用步骤 1 中的修复重做(我知道对于手动 merge git-rerere 可以减少重复的工作,但我'我从未使用过它),或者只是再次 merge 并接受稍微困惑的历史记录。

这确保了“错误修复”实际上适用于branch1,并且不会在branch2代码之外被巧妙地破坏,并且它们在两个分支中是相同的。

另一方面,“不要这样做”的答案:对于需要修改主程序代码的“插件”来说,这是糟糕的软件架构;这使得它不是一个真正的插件。如果你修复了这个问题,那么主程序和插件就会成为独立的树(就你对 Git 的使用而言),并且不需要 merge (尽管仍然可能需要更新兼容性,如你的 qwe→qwer )。

关于git - 以下 Git 提交策略正确吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9333995/

相关文章:

javascript - 我无法在我的 cordova 应用程序中看到 OPENTOK 订阅者视频

git - 为什么 Git 不允许我从备用远程查看分支?

git - 如何让 git 通过放置 "ours first, then theirs"来解决 merge 冲突

具有多个祖先和kdiff3的git递归策略

git - 如何将一个存储库的提交历史记录转移到另一个存储库?

git - 我的合作者的提交是如何进入我的分支的?

git - merge 时解决冲突后提交消息的问题

merge 提交的 git 显示

git - 推送到 Git 返回错误代码 403 fatal : HTTP request failed

git - 无法在 Gerrit 中 merge