相关疑难解决方法(0)

如何修改指定的提交?

我通常会提交一份提交列表以供审核.如果我有以下提交:

  1. HEAD
  2. Commit3
  3. Commit2
  4. Commit1

...我知道我可以修改头部提交git commit --amend.但是我怎么能修改Commit1,因为它不是HEAD提交?

git git-rewrite-history

2077
推荐指数
15
解决办法
69万
查看次数

Git - 如何使用当前索引(当前状态)中的一些非暂存更改来编辑旧(不是之前的)提交?

我已经看过这些先前的问题了:

但它们并没有完全解决特定问题 - 索引中还有其他变化!运行rebase命令时,git抱怨:Cannot rebase: You have unstaged changes.

场景:

最后一个之前的提交(我将其称为"2 HEADs前"吗?)是一个重构提交.我目前在索引中有许多非分段更改,但我只想将其中一些添加到上一次提交的上一次.

我想象这样做的方法是:

  1. stash 我目前的所有变化
  2. rebase -i 到最后一次提交(更改索引并移动Head,对吧?)
  3. 将存储加载到我的索引而不更改Head(如何?)
  4. 使用add -pcommit --amend有选择地修改此旧提交
  5. rebase --continue 完成(更新孩子,移动回到我开始的地方,索引会发生什么?)
  6. 然后弹出/清除存储(索引回到我开始的地方).

它是否正确?如果是,我该如何做第3步?如果不是,我应该做什么呢?

另外,请注意我还在学习git,我仍然不能100%确定我正确地引用了git(Head,index,stash等)中的东西.


解:

对于其他任何人都可以提供帮助,这些是我实际采取的步骤:

  1. git stash 我目前的所有变化
  2. git rebase -i <ID>到前一次提交的父级,更改索引并移动Head
  3. git stash apply 将存储加载到我的索引中而不更改Head
    • 如果您有冲突,git reset HEAD <file>请卸载文件暂存.确保分期清晰.
  4. 使用add -pcommit --amend有选择地进行更改并提交它们
  5. git reset --hard 丢弃索引,使其与Head匹配
  6. git rebase --continue完成.更新孩子,移动头回到最开始,但有变化
    • 历史现在分为两个版本.另一个分支在WIP之前结束
  7. 然后弹出存储将索引带回我开始的地方.另一个分支也被清除.

git

6
推荐指数
2
解决办法
2789
查看次数

标签 统计

git ×2

git-rewrite-history ×1