首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用另一个不包含主文件的分支更新主分支?

使用另一个不包含主文件的分支更新主分支?
EN

Stack Overflow用户
提问于 2018-02-06 10:54:30
回答 3查看 39关注 0票数 0

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

我有两个分支:

  1. master -包含README.mdtests/all/*.pypackage/*.py
  2. unit-testing -包含tests/units/*.pypackage/*.py

unit-testing分支不包含master包含的README.mdtests/all/*.py。此外,unit-testingpackage/*.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.mdtests/all/*.py中删除master

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-02-06 11:38:19

我认为您是从“"unit-testing”主“分支创建的。如果是,您可以将主分支合并为单元测试分支。有时候这会给你带来冲突。解决冲突,并将“单元测试”重新合并为“主”分支。在做这个之前,最好先备份一下项目。

代码语言:javascript
复制
git checkout unit-testing
git merge master

如果你有冲突解决,

代码语言:javascript
复制
git commit
git checkout master
git merge unit-testing
票数 -1
EN

Stack Overflow用户

发布于 2018-02-06 11:54:59

似乎unit-testing,或者更确切地说,它所指向的提交,在其历史上曾经有过README.mdtests/all/*.py,但是它们随后被删除了。当您合并unit-testing时,这些删除也会引入到master中,以便从master中删除README.mdtests/all/*.py

如果您希望将已删除的文件保存在master中,以下是两种解决方案,如果您打算将unit-testing合并到master中,但保留一些文件不受影响。

第一项:

代码语言:javascript
复制
git checkout master
git merge unit-testing --squash
git checkout HEAD -- README.md tests/all/*.py
git commit

这样,除了README.mdtests/all/*.py之外,还将README.md的变化引入到master中。但是,当您查看它们的历史图表时,unit-testingmaster仍然存在分歧,就好像它们还没有被合并一样。

第二部分:

代码语言:javascript
复制
git checkout master
git merge unit-testing
git checkout ORIG_HEAD -- README.md tests/all/*.py
git commit

这样,unit-testing的所有变化都被引入到master中,因此首先消除了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,以找出它们正在执行的提交。假设masterabc111上,您可以通过以下方式返回:

代码语言:javascript
复制
git checkout master
git reset abc111 --hard
票数 1
EN

Stack Overflow用户

发布于 2018-02-06 14:30:49

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

分支并不打算将测试代码与生产代码分离(或者更一般地说,项目的一个部分和另一个部分)。如果您创建一个分支,在其上删除项目中相当大的块,则应重新考虑您的工作流。

您试图通过在自己的分支上拥有测试代码来解决什么问题?对于你想要解决的任何问题,你有没有看过更典型的解决方案?

您打算如何使测试代码与主项目代码保持同步,因为每个测试代码都在变化?您如何知道测试分支上的哪个提交应该测试哪个在主分支上提交?“第五次提交测试第五次提交”?将限制您使用git,直到它最终失败为止。“基于标签或提交ID之类的文档”?这不是一门实用的学科。

如果您解决了使用分支的方式与它们的粒度相反的根本问题,那么您将不会遇到所述的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48641299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档