我是git
的新手,这是我的情况:
我有两个分支:
master
- 包含README.md
,tests/all/*.py
,package/*.py
unit-testing
- 包含tests/units/*.py
,package/*.py
unit-testing
分支不包含README.md
和tests/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/*.py
和master
。
答案 0 :(得分:1)
似乎unit-testing
,或者更具体地说是它所指向的提交,在其历史记录中曾有README.md
和tests/all/*.py
但它们随后被删除。合并unit-testing
后,这些删除也会引入master
,因此README.md
和tests/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-testing
和README.md
之外的tests/all/*.py
的更改会引入master
。但是,当您查看其历史记录图表时,unit-testing
和master
仍然存在分歧,就像它们尚未合并一样。
第二个:
git checkout master
git merge unit-testing
git checkout ORIG_HEAD -- README.md tests/all/*.py
git commit
这样,unit-testing
的所有更改都会引入主人,因此首先会移除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
答案 1 :(得分:1)
您接受的答案可能已经引导您找到解决方案,而另一个答案实际上描述了您的情况,也可能会导致解决方案;但他们都在治疗症状。
分支机构不是用于将测试代码与生产代码(或更一般地,项目的一部分与另一部分)分离。如果您创建一个分支,在该分支上删除了相当大的项目块,则应重新考虑您的工作流程。
您想通过将测试代码放在自己的分支上来解决什么问题?您是否考虑过针对您尝试解决的任何问题的更典型的解决方案?
您打算如何使测试代码与主项目代码保持同步,因为每个代码都会发生变化?您如何知道测试分支上的提交应该测试主分支上的哪个提交? "第5次提交测试第5次提交"?将限制你使用git直到它最终失败。 "基于标签或提交ID或某些此类"的文档?跟不上实际的纪律。
如果你修复了以与谷物相反的方式使用分支的根本问题,你就不会遇到所述问题。
答案 2 :(得分:-1)
我认为你创建了" 单元测试"分支来自" 主人"科。如果是,您可以将主分支合并到单元测试分支。有时这会给你带来冲突。解决冲突并再次合并"单元测试"进入"主人"科。在执行此操作之前,您可以更好地获得项目备份。
gcloud datastore cleanup-indexes /path/to/file/index.yaml
现在,如果你有冲突解决它们,
git checkout unit-testing
git merge master