解决方法 git 提交



假设我有 3 个 git 提交:

  1. 在侧边栏上提交更改
  2. 在页脚上提交更改
  3. 在标头上提交更改

现在让我们假设我已经经历了精神觉醒,并意识到我只需要在标题上和一个侧边栏上进行更改,页脚很好,不需要更改。

是否有可以执行以下操作的命令?

  • 合并提交#3 减去提交#2
  • 删除提交#2
  • 合并提交#
  • 3 加上提交#1

(或任何其他使提交#2的方法,因为它从未发生过)。

交互式变基允许您修改、重新排列、合并提交、更改消息等:

git rebase --interactive

引用帮助:

# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x, exec = run command (the rest of the line) using shell
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#

丢失提交是您想要的。

您始终可以使用 git-revert 从单个提交中还原更改。

给定一个或多个现有提交,还原相关修补程序引入的更改,并记录一些记录这些更改的新提交。这要求你的工作树是干净的(没有来自 HEAD 提交的修改)。

注意:git revert用于记录一些新提交,以扭转一些早期提交(通常只是一个错误的提交)的影响。如果你想丢弃工作目录中所有未提交的更改,你应该看到 git-reset(1),尤其是 --hard 选项。如果你想提取另一个提交中的特定文件,你应该看到 git-checkout(1),特别是git checkout <commit> -- <filename> syntax 。请注意这些替代方法,因为两者都会丢弃工作目录中未提交的更改。

所以:

git revert <commit-id-of-footer-changes>

您可以使用cherry-pick合并所需的提交,然后在页脚更改之前revert要提交的开发分支。

git checkout branch_to_merge_into
git cherry-pick commit#1 commit#3

最新更新