如何“git reset”到旧提交并添加更改而不删除我的GitHub拉取请求中的旧提交

kmbjn2e3  于 2022-11-20  发布在  Git
关注(0)|答案(2)|浏览(137)

我想使用一个旧的提交并添加不同的修改(但我不想删除我的提交历史记录)。目前,类似这样的操作会删除我的GitHub拉取请求历史记录中的最后3个提交,并显示一个包含我的新修改的新提交:

git reset HEAD~3
git add .
git commit -m "New changes"
git push --force

有没有办法保留我最近的3次提交,然后在第4次提交时添加“新的更改”?

  • 我尝试的内容:*
git reset HEAD~3
git add .
git commit -m "New changes"
git push --force
  • 我希望发生的事情:* 添加一个新提交,而不删除历史记录中的最后三个提交
  • 实际结果:* 一个新的提交,取代了前三个提交。
1cosmwyk

1cosmwyk1#

现在的做法是这样的:

git restore --staged --worktree --source=HEAD~3 -- .
git commit "reverting to blahblah"
suzh9iv8

suzh9iv82#

一 个 提交 一旦 被 写入 , 就 不能 再 被 修改 了 。 但是 你 可以 用 一 个 新 的 类似 的 提交 来 替换 它 。
如果 你 有 提交 A-B - C-D - E , 并且 你 想 修改 提交 B 中 的 某些 内容 , 你 需要 创建 一 个 新 的 提交 B ' ( 和 C'- D'- E') 。 最 简单 的 方法 是 交互 式 重 定 基 :

$ git rebase -i A
$ # now change the line "pick B" to "edit B" and save the file
$ # make your changes and stage (add) them
$ git commit --amend # create commit B'
$ git rebase --continue
$ # git will automatically create C'-D'-E'

中 的 每 一 个
如果 你 的 新 修改 与 C-D - E 的 修改 冲突 , Git 会 停止 重 定 基 并 要求 你 解决 冲突 。
如果 您 的 更改 独立 于 后续 提交 中 的 任何 现有 更改 , 则 可以 通过 创建 一 个 " fixup commit " 然后 使用 autosqash 运行 rebase 来 部分 自动 更改 " todo list " :

$ # make your changes and stage them
$ git commit --fixup B
$ git rebase -i --autosquash
$ # fixup commit should be moved after "B" and changed to "fixup"
$ # save file and exit editor

格式
同样 , 如果 有 任何 冲突 , Git 会 停止 rebase 并 要求 你 解决 冲突 , 然后 继续 git rebase --continue

相关问题