我是git的新手,这就是我的情况:
我有两个分支:
master -包含README.md,tests/all/*.py,package/*.pyunit-testing -包含tests/units/*.py,package/*.pyunit-testing分支不包含master包含的README.md和tests/all/*.py。此外,unit-testing的package/*.py中的内容比较新。
我希望unit-testing's package/*.py的更新内容覆盖master's package/*.py的旧内容。这可以由我来完成。但我也希望master中的文件,如README.md中的文件,不会像在master中那样保留在unit-testing中。
但是,当我尝试merge unit-testing to master时,我发现unit-testing中没有的文件会从master中删除。我不能将master合并到unit-testing中,因为unit-testing包含更新的内容。
更具体地说,我运行以下命令:
$ git checkout master $ git merge unit-testing
Git从README.md和tests/all/*.py中删除master。
发布于 2018-02-06 11:38:19
我认为您是从“"unit-testing”主“分支创建的。如果是,您可以将主分支合并为单元测试分支。有时候这会给你带来冲突。解决冲突,并将“单元测试”重新合并为“主”分支。在做这个之前,最好先备份一下项目。
git checkout unit-testing
git merge master如果你有冲突解决,
git commit
git checkout master
git merge unit-testing发布于 2018-02-06 11:54:59
似乎unit-testing,或者更确切地说,它所指向的提交,在其历史上曾经有过README.md和tests/all/*.py,但是它们随后被删除了。当您合并unit-testing时,这些删除也会引入到master中,以便从master中删除README.md和tests/all/*.py。
如果您希望将已删除的文件保存在master中,以下是两种解决方案,如果您打算将unit-testing合并到master中,但保留一些文件不受影响。
第一项:
git checkout master
git merge unit-testing --squash
git checkout HEAD -- README.md tests/all/*.py
git commit这样,除了README.md和tests/all/*.py之外,还将README.md的变化引入到master中。但是,当您查看它们的历史图表时,unit-testing和master仍然存在分歧,就好像它们还没有被合并一样。
第二部分:
git checkout master
git merge unit-testing
git checkout ORIG_HEAD -- README.md tests/all/*.py
git commit这样,unit-testing的所有变化都被引入到master中,因此首先消除了README.md和tests/all/*.py。但后来他们又被git checkout ORIG_HEAD -- README.md tests/all/*.py带回了。
这两种方法对文件几乎做了相同的事情,但是创建了不同的历史记录。您可以看到git log --oneline --graph --decorate unit-testing master在这两种情况下的不同之处。
如果您想在尝试之后返回它们所在的位置,请运行git reflog master和git reflog unit-testing,以找出它们正在执行的提交。假设master在abc111上,您可以通过以下方式返回:
git checkout master
git reset abc111 --hard发布于 2018-02-06 14:30:49
你接受的答案可能会引导你找到一个解决方案,而另一个答案实际上描述了你的情况,也可能导致解决方案;但两者都在治疗症状。
分支并不打算将测试代码与生产代码分离(或者更一般地说,项目的一个部分和另一个部分)。如果您创建一个分支,在其上删除项目中相当大的块,则应重新考虑您的工作流。
您试图通过在自己的分支上拥有测试代码来解决什么问题?对于你想要解决的任何问题,你有没有看过更典型的解决方案?
您打算如何使测试代码与主项目代码保持同步,因为每个测试代码都在变化?您如何知道测试分支上的哪个提交应该测试哪个在主分支上提交?“第五次提交测试第五次提交”?将限制您使用git,直到它最终失败为止。“基于标签或提交ID之类的文档”?这不是一门实用的学科。
如果您解决了使用分支的方式与它们的粒度相反的根本问题,那么您将不会遇到所述的问题。
https://stackoverflow.com/questions/48641299
复制相似问题