我已经提交了3个git,但没有被推送。如何修改不是最新版本的旧版本(ddc6859af44)和(47175e84c)?
$git log
commit f4074f289b8a49250b15a4f25ca4b46017454781
Date: Tue Jan 10 10:57:27 2012 -0800
commit ddc6859af448b8fd2e86dd0437c47b6014380a7f
Date: Mon Jan 9 16:29:30 2012 -0800
commit 47175e84c2cb7e47520f7dde824718eae3624550
Date: Mon Jan 9 13:13:22 2012 -0800
发布于 2012-01-12 03:06:23
git rebase -i HEAD^^^
现在用edit
或e
(替换pick
)标记您想要修改的那些。现在保存并退出。
现在进行您的更改,然后
git add .
git rebase --continue
如果您想要添加额外的delete,请从commit命令中删除这些选项。如果您想调整消息,只需省略--no-edit
选项。
发布于 2013-08-19 15:24:26
我已经用过几次另一种方法了。事实上,它是一个手动的git rebase -i
,当你想要重新安排几个提交时,它是很有用的,包括压缩或拆分一些提交。它的主要优点是,您不必在某个时刻决定每个提交的命运。您还可以在此过程中使用所有Git功能,而不是在rebase过程中。例如,您可以随时显示原始历史记录和重写历史记录的日志,甚至可以进行另一次rebase!
我将以以下方式引用提交,因此它很容易阅读:
C # good commit after a bad one
B # bad commit
A # good commit before a bad one
你一开始的历史是这样的:
x - A - B - C
| |
| master
|
origin/master
我们将以这种方式重新创建它:
x - A - B*- C'
| |
| master
|
origin/master
操作步骤
git checkout B # get working-tree to the state of commit B
git reset --soft A # tell Git that we are working before commit B
git checkout -b rewrite-history # switch to a new branch for alternative history
使用git add
(git add -i
、git stash
等)改进您的旧提交现在。您甚至可以将旧的提交拆分为两个或更多。
git commit # recreate commit B (result = B*)
git cherry-pick C # copy C to our new branch (result = C')
中间结果:
x - A - B - C
| \ |
| \ master
| \
| B*- C'
| |
| rewrite-history
|
origin/master
让我们结束吧:
git checkout master
git reset --hard rewrite-history # make this branch master
或者只使用一条命令:
git branch -f master # make this place the new tip of the master branch
就是这样,你现在可以push
你的进度了。
最后一项任务是删除临时分支:
git branch -d rewrite-history
发布于 2012-01-12 03:01:30
您可以使用git rebase --interactive
,在您想要修改的提交上使用edit
命令。
https://stackoverflow.com/questions/8824971
复制相似问题