我刚刚使用 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 比较陌生,我不太确定我是否正确并以最佳方式使用了东西。请让我知道上述内容是否有意义,如果没有,请告诉我更好的方法。
最佳答案
我觉得你的做法很合理。不过,我会采取不同的做法:
一旦我看到基本代码中的错误,就 stash 并切换到branch1,并在那里修复它们。 测试、完善、提交。
将旧的分支 1 merge 到分支 2 中,并使用步骤 1 中的修复重做(我知道对于手动 merge
git-rerere
可以减少重复的工作,但我'我从未使用过它),或者只是再次 merge 并接受稍微困惑的历史记录。
这确保了“错误修复”实际上适用于branch1,并且不会在branch2代码之外被巧妙地破坏,并且它们在两个分支中是相同的。
另一方面,“不要这样做”的答案:对于需要修改主程序代码的“插件”来说,这是糟糕的软件架构;这使得它不是一个真正的插件。如果你修复了这个问题,那么主程序和插件就会成为独立的树(就你对 Git 的使用而言),并且不需要 merge (尽管仍然可能需要更新兼容性,如你的 qwe→qwer )。
关于git - 以下 Git 提交策略正确吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9333995/