我有一个git repo,它有一系列提交,其中包括合并(来自分支)。
在维护历史记录的同时恢复这些提交的最佳做法是什么?例如:
$ git log --oneline
I (HEAD -> development) Some commit msg
H - Another commit msg
G - Yet another commit msg
F Merged [featurebranch] into development
E - An earlier commit msg
D Merged [earlierfeaturebranch] into development
C - Some other commit msg
B - First commit after initial
A - Initial commit
现在,我想(错误地)如果我想在提交B时恢复到回购状态,我只需要做:
$ git revert -n B..HEAD
这是错误的,因为git会对此感到愤怒:
$ git revert -n B..HEAD
error: commit F is a merge, but no -m option was given.
简单地做
$ git revert -n -m 1 B..HEAD
似乎不起作用,因为随后有关于已删除(自提交B后添加)文件的冲突报告。这听起来不对,因为这不重要,我只想回到提交B的状态,并将其推回到原点。
到底缺少了什么(或被掩盖在这里)?
我想一个便宜的方法是 checkout 提交B,备份它,然后 checkout 开发并用B替换开发内容,然后推送它,但这听起来一点都不正确。
1条答案
按热度按时间0vvn1miw1#
如果要返回提交B中的状态,但保留历史记录,请确保要修改的分支已 checkout 并处于干净状态,然后可以执行以下操作:
这将生成一个新的提交(称为
J
),其状态与提交B
相同,但将I
作为其父级,而不是A
。关于您的想法:
我想一个便宜的方法是 checkout 提交B,备份它,然后 checkout 开发并用B替换开发内容,然后推送它,但这听起来一点都不正确。
从概念上讲,这是正确的,上面的命令基本上就是这样做的,但以一种“gitty”方式,不需要单独的备份。
**旁注:**如果你不关心历史,你只需要使用: