如何检出旧的提交并将其提交给新的提交
我想跟随另一个关于这个问题的问题:“签出旧的提交并将其作为新的提交
但他们说:“不要那样做!” 所以似乎我必须提出一个新问题。 (尽管我认为对我来说最好的答案不是按照预期的那样工作,而是同一个问题......
  如果我提交了ABCDEF (想象这些都是SHA的)。  我想将整个存储库完全保存为C ,然后提交它以创建与C完全相同的'G' 。  所以当我完成时,即使C&G是相同的,日志也是ABCDEFG。 
  一个答案表明樱桃挑选,这似乎是完美的,但它使我解决了C和F之间的每一个冲突。  我看了看文件,我试图--force无论如何,然后推荐--patch 。  --patch是最接近的,但它不是绝对的。  那么有没有办法让樱桃挑选只选择C版本的冲突? 
  另一个最接近的答案是签出C ,但是我找不到将它保留在同一分支上的魔术字。  在最近的训练我完成说用“神奇短跑冲刺”末告诉git你想这个对当前分支,但无论我做什么,它会创建一个“(无分支)”分支。 
  我相信你可以告诉我,我对git(以及一般的命令行)很陌生,但我试图自己弄清楚。  如果你可以使用你推荐的详细版本,那么它会更好地坚持在我的头上,将不胜感激。  ( -a = --all或-a = --annotate或-a = --albuquerque? ) 
这看起来很简单,而且你可能想要用git做什么 - 如果你改变了主意,可以返回以前的提交而不会丢失中间提交。
  你介意产生: ABCDEF-F'-E'-D'其中的代码的状态D'也正是因为它是在C (所以G == D' )?  在这种情况下,只需恢复F , E和D  如果您不想要中间步骤,请revert但不应用,然后提交。  那是: 
$ git revert -n HEAD
$ git revert -n HEAD~
$ git revert -n HEAD~2
$ git commit -m 'Revert D,E,and F'
  在此之后,当前的HEAD是G,并且两个提交G和C应该包含相同的代码树。  你可以通过检查git cat-file -p HEAD | grep ^tree的输出来验证  git cat-file -p HEAD | grep ^tree和git cat-file -p C | grep ^tree  git cat-file -p C | grep ^tree 。  这两个命令都应该提供相同的输出。 
  但是为什么你想保持中间提交并不是很清楚。  如果你想要他们为后代,那么做一些事情: git branch old-stuff , git reset C这会将当前分支设置回C ,但是D , E和F仍然可以在名为old-stuff的分支中查看。 
  我想你需要使用git cherry-pick 。 
https://www.kernel.org/pub/software/scm/git/docs/git-cherry-pick.html
git cherry-pick --strategy=recursive -X ours C
GIT中合并(1):
递归策略可以采用以下选项:
我们的
这个选项强制相互冲突的hunk通过支持我们的版本自动解决。 [...]
  “我们”和“他们的”是指两个合并提交。  但是,我不确定git cherry-pick会采用哪种方式来处理提交,因此您可能需要-X theirs取而代之。  你可以创建一个新的分支,试试看看。 
