首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何修改旧的Git提交?

如何修改旧的Git提交?
EN

Stack Overflow用户
提问于 2012-01-12 02:52:57
回答 4查看 136.9K关注 0票数 202

我已经提交了3个git,但没有被推送。如何修改不是最新版本的旧版本(ddc6859af44)和(47175e84c)?

代码语言:javascript
复制
$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
EN

回答 4

Stack Overflow用户

发布于 2012-01-12 03:06:23

代码语言:javascript
复制
git rebase -i HEAD^^^

现在用edite (替换pick)标记您想要修改的那些。现在保存并退出。

现在进行您的更改,然后

代码语言:javascript
复制
git add .
git rebase --continue

如果您想要添加额外的delete,请从commit命令中删除这些选项。如果您想调整消息,只需省略--no-edit选项。

票数 252
EN

Stack Overflow用户

发布于 2013-08-19 15:24:26

我已经用过几次另一种方法了。事实上,它是一个手动的git rebase -i,当你想要重新安排几个提交时,它是很有用的,包括压缩或拆分一些提交。它的主要优点是,您不必在某个时刻决定每个提交的命运。您还可以在此过程中使用所有Git功能,而不是在rebase过程中。例如,您可以随时显示原始历史记录和重写历史记录的日志,甚至可以进行另一次rebase!

我将以以下方式引用提交,因此它很容易阅读:

代码语言:javascript
复制
C # good commit after a bad one
B # bad commit
A # good commit before a bad one

你一开始的历史是这样的:

代码语言:javascript
复制
x - A - B - C
|           |
|           master
|
origin/master

我们将以这种方式重新创建它:

代码语言:javascript
复制
x - A - B*- C'
|           |
|           master
|
origin/master

操作步骤

代码语言:javascript
复制
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 -igit stash等)改进您的旧提交现在。您甚至可以将旧的提交拆分为两个或更多。

代码语言:javascript
复制
git commit           # recreate commit B (result = B*)
git cherry-pick C    # copy C to our new branch (result = C')

中间结果:

代码语言:javascript
复制
x - A - B - C 
|    \      |
|     \     master
|      \
|       B*- C'
|           |
|           rewrite-history
|
origin/master

让我们结束吧:

代码语言:javascript
复制
git checkout master
git reset --hard rewrite-history  # make this branch master

或者只使用一条命令:

代码语言:javascript
复制
git branch -f master  # make this place the new tip of the master branch

就是这样,你现在可以push你的进度了。

最后一项任务是删除临时分支:

代码语言:javascript
复制
git branch -d rewrite-history
票数 14
EN

Stack Overflow用户

发布于 2012-01-12 03:01:30

您可以使用git rebase --interactive,在您想要修改的提交上使用edit命令。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8824971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档