使用另一个没有主文件所包含的文件的分支更新主分支?

时间:2018-02-06 10:54:30

标签: git version-control git-branch git-merge

我是git的新手,这是我的情况:

我有两个分支:

  1. master - 包含README.mdtests/all/*.pypackage/*.py
  2. unit-testing - 包含tests/units/*.pypackage/*.py
  3. unit-testing分支包含README.mdtests/all/*.py确实包含的master。此外,unit-testing' package/*.py中的内容较新。

    我希望unit-testing package/*.py的较新内容覆盖master package/*.py的旧内容。这可以由我完成。但我也希望master中的文件(例如README.md)不在unit-testing中,而是保留在master中。

    但是当我尝试merge unit-testing进入master时,我发现不在unit-testing中的文件会从master中删除。我无法将master合并到unit-testing,因为unit-testing包含较新的内容。

    更具体地说,我运行以下命令:

    $ git checkout master $ git merge unit-testing

    Git从README.md删除tests/all/*.pymaster

3 个答案:

答案 0 :(得分:1)

似乎unit-testing,或者更具体地说是它所指向的提交,在其历史记录中曾有README.mdtests/all/*.py但它们随后被删除。合并unit-testing后,这些删除也会引入master,因此README.mdtests/all/*.py会从master中删除。

如果您希望将已删除的文件保留在master中,如果您打算将unit-testing合并到master但保留一些文件,则此处有两种解决方案。

第一个:

git checkout master
git merge unit-testing --squash
git checkout HEAD -- README.md tests/all/*.py
git commit

这样,除unit-testingREADME.md之外的tests/all/*.py的更改会引入master。但是,当您查看其历史记录图表时,unit-testingmaster仍然存在分歧,就像它们尚未合并一样。

第二个:

git checkout master
git merge unit-testing
git checkout ORIG_HEAD -- README.md tests/all/*.py
git commit

这样,unit-testing的所有更改都会引入主人,因此首先会移除README.mdtests/all/*.py。但后来他们被git checkout ORIG_HEAD -- README.md tests/all/*.py带回来。

这两种方法几乎对文件做同样的事情,但创建了不同的历史记录。在这两种情况下,您可以通过git log --oneline --graph --decorate unit-testing master看到差异。

如果您想在尝试之后回到原来的位置,请运行git reflog mastergit reflog unit-testing以找出他们所处的提交。假设master位于abc111,您可以通过以下方式返回:

git checkout master
git reset abc111 --hard

答案 1 :(得分:1)

您接受的答案可能已经引导您找到解决方案,而另一个答案实际上描述了您的情况,可能会导致解决方案;但他们都在治疗症状。

分支机构不是用于将测试代码与生产代码(或更一般地,项目的一部分与另一部分)分离。如果您创建一个分支,在该分支上删除了相当大的项目块,则应重新考虑您的工作流程。

您想通过将测试代码放在自己的分支上来解决什么问题?您是否考虑过针对您尝试解决的任何问题的更典型的解决方案?

您打算如何使测试代码与主项目代码保持同步,因为每个代码都会发生变化?您如何知道测试分支上的提交应该测试主分支上的哪个提交? "第5次提交测试第5次提交"?将限制你使用git直到它最终失败。 "基于标签或提交ID或某些此类"的文档?跟不上实际的纪律。

如果你修复了以与谷物相反的方式使用分支的根本问题,你就不会遇到所述问题。

答案 2 :(得分:-1)

我认为你创建了" 单元测试"分支来自" 主人"科。如果是,您可以将主分支合并到单元测试分支。有时这会给你带来冲突。解决冲突并再次合并"单元测试"进入"主人"科。在执行此操作之前,您可以更好地获得项目备份。

gcloud datastore cleanup-indexes /path/to/file/index.yaml

现在,如果你有冲突解决它们,

git checkout unit-testing
git merge master