Git合并但中止所有本地更改

时间:2019-06-04 00:49:39

标签: git

我有两个分支的情况。分支good和分支bad。我正在寻找合并之类的东西。但是合并并不完全正确。本质上,我希望位于错误分支上,并且我希望错误分支上的文件成为良好分支上文件的副本或克隆。我想运行某种合并,以便坏分支中的所有文件都与好分支中的文件相同。但是历史不应该被弄乱。这应该只是来自bad的历史记录的新提交。

我尝试过

git checkout bad
git merge -X theirs good

但这不是很正确,这可以使某些更改保持良好状态。我可以这样做来解决

git diff bad good

并手动删除每个差异。本质上,我会不断删除内容,直到差异为空。然后,操作完成,分支bad现在与分支good相同。当然必须有更好的方法吗?我想进行合并,使其完全复制其他分支文件,而不是合并它们。

任何帮助将不胜感激。我尝试搜索copy other branch git之类的东西,但似乎没有任何意义。

3 个答案:

答案 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