使用不包含 master 包含的所有文件的另一个分支更新 master 分支?
Update master branch using another branch which doesn't have all the files master contains?
我是 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 从 master
.
中删除 README.md
和 tests/all/*.py
我想你从“master”分支创建了“unit-testing”分支。如果是,您可以将 master 分支合并到单元测试分支。有时这会给你带来冲突。解决冲突并再次合并 "unit-testing" 到 "master" 分支。最好在执行此操作之前备份项目。
git checkout unit-testing
git merge master
现在,如果您遇到冲突,请解决它们,
git commit
git checkout master
git merge unit-testing
似乎 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
的变化全部引入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
您接受的答案可能会引导您找到解决方案,而另一个答案如实描述了您的情况,也可能会引导您找到解决方案;但他们都在治疗症状。
分支不是为了将测试代码与生产代码分开(或者更一般地说,项目的一部分与另一部分)。如果您创建了一个分支,并在其中删除了项目的相当大的块,您应该重新考虑您的工作流程。
你想通过将测试代码放在自己的分支上来解决什么问题?对于您要解决的任何问题,您是否看过更典型的解决方案?
您打算如何使测试代码与主要项目代码保持同步,因为每个代码都会发生变化?你怎么知道测试分支上的 哪个 提交应该测试主分支上的哪个提交? "The 5th commit tests the 5th commit"?将限制您对 git 的使用,直到它最终失败。 "Documentation based on tags or commit ID's or some such"?不是一门实用的纪律。
如果您解决了以违背其原则的方式使用分支的潜在问题,您将不会遇到上述问题。
我是 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 从 master
.
README.md
和 tests/all/*.py
我想你从“master”分支创建了“unit-testing”分支。如果是,您可以将 master 分支合并到单元测试分支。有时这会给你带来冲突。解决冲突并再次合并 "unit-testing" 到 "master" 分支。最好在执行此操作之前备份项目。
git checkout unit-testing
git merge master
现在,如果您遇到冲突,请解决它们,
git commit
git checkout master
git merge unit-testing
似乎 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
的变化全部引入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
您接受的答案可能会引导您找到解决方案,而另一个答案如实描述了您的情况,也可能会引导您找到解决方案;但他们都在治疗症状。
分支不是为了将测试代码与生产代码分开(或者更一般地说,项目的一部分与另一部分)。如果您创建了一个分支,并在其中删除了项目的相当大的块,您应该重新考虑您的工作流程。
你想通过将测试代码放在自己的分支上来解决什么问题?对于您要解决的任何问题,您是否看过更典型的解决方案?
您打算如何使测试代码与主要项目代码保持同步,因为每个代码都会发生变化?你怎么知道测试分支上的 哪个 提交应该测试主分支上的哪个提交? "The 5th commit tests the 5th commit"?将限制您对 git 的使用,直到它最终失败。 "Documentation based on tags or commit ID's or some such"?不是一门实用的纪律。
如果您解决了以违背其原则的方式使用分支的潜在问题,您将不会遇到上述问题。