我有两个分支的情况。分支good
和分支bad
。我正在寻找合并之类的东西。但是合并并不完全正确。本质上,我希望位于错误分支上,并且我希望错误分支上的文件成为良好分支上文件的副本或克隆。我想运行某种合并,以便坏分支中的所有文件都与好分支中的文件相同。但是历史不应该被弄乱。这应该只是来自bad
的历史记录的新提交。
我尝试过
git checkout bad
git merge -X theirs good
但这不是很正确,这可以使某些更改保持良好状态。我可以这样做来解决
git diff bad good
并手动删除每个差异。本质上,我会不断删除内容,直到差异为空。然后,操作完成,分支bad
现在与分支good
相同。当然必须有更好的方法吗?我想进行合并,使其完全复制其他分支文件,而不是合并它们。
任何帮助将不胜感激。我尝试搜索copy other branch git
之类的东西,但似乎没有任何意义。
答案 0 :(得分:3)
git checkout bad
git reset --hard good
这使bad
指向与good
相同的提交,这意味着它们将完全相同。 bad
实际上是good
的副本,无论是在内容还是历史记录中。
答案 1 :(得分:2)
执行git reset --hard
的问题(如果您想这样称呼)是您不只是将文件设置为与其他分支相同,而是将一切设置为与其他分支类似...并且还涵盖了错误分支的历史。 如果您想保留不好的故事,并进行新的修订,使一切看起来都像是在良好分支上,那么就可以解决问题:
git checkout --detach good
git reset --soft bad # moving HEAD to bad, but all files will stay as they are in good, all differences will be on index, ready to be committed
git commit -m "New revision, everything is like it is on good branch"
git branch -f bad # move bad branch pointer to new revision
git checkout bad
但这取决于您是否要保留错误的分支历史记录。
答案 2 :(得分:1)
git reset --hard good # set work tree, index and parent
git reset --soft bad # undo the parent switch
git commit
或
git read-tree -um good # set work tree and index
git commit