【发布时间】:2021-04-28 05:46:05
【问题描述】:
例如,在一个分支中,有 3 个提交:A <- B <- C。如果我直接选择 B(Test A),Git 会说:
The previous cherry-pick is now empty, possibly due to conflict resolution.
If you wish to commit it anyway, use:
git commit --allow-empty
我可以理解,因为 B 已经在这个分支中,所以再次挑选它是没有操作的。
然后我通过以下方式在批量提交中恢复了B 和C:
git revert -n B^..C
git commit -a -m "xxx"
这将是一个新的大提交D,它会还原B 和C,分支应该类似于A <- B <- C <- D。
然后由于某种原因我需要重做B和C。我试过了:
git cherry-pick B^..C
我看到两个新提交 B' 和 C' 附加到分支:A <- B <- C <- D <- B' <- C'。
我的第一个问题是,Git 如何智能地知道它应该创建B' 和C'?我以为 Git 会发现 B 和 C 已经在分支历史记录中,所以它可能会像我直接在 Test A 中选择“B”一样跳过它们。
然后,在那之后,由于分支已经是A <- B <- C <- D <- B' <- C',我再次运行这个命令:
git cherry-pick B^..C
我希望 Git 能够识别出这是一个无操作操作。但这一次 Git 抱怨冲突。我的第二个问题是,为什么这次 Git 无法识别并跳过这个操作?
【问题讨论】:
标签: git git-revert cherry-pick git-cherry-pick