如何修改较早的Git提交?

8 浏览
0 Comments

如何修改较早的Git提交?

我已经做了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

0
0 Comments

在使用rebase-i命令时,我想要将我准备好的提交和一个较旧的提交合并,但是我惊讶地发现rebase-i提示我有未提交的更改。但是我不想再次进行更改,也不想在较旧的提交中指定edit选项。所以解决方案非常简单和直接:

1. 准备好要更新的较旧提交,添加并提交它

2. 运行git rebase -i <要修改的提交>^命令-注意^,这样你就可以在文本编辑器中看到该提交

3. 你会得到类似于以下的内容:

pick 8c83e24 use substitution instead of separate subsystems file to avoid jgroups.xml and jgroups-e2.xml going out of sync

pick 799ce28 generate ec2 configuration out of subsystems-ha.xml and subsystems-full-ha.xml to avoid discrepancies

pick e23d23a fix indentation of jgroups.xml

4. 现在要将e23d23a与8c83e24合并,你可以更改行的顺序并使用squash命令,例如:

pick 8c83e24 use substitution instead of separate subsystems file to avoid jgroups.xml and jgroups-e2.xml going out of sync

squash e23d23a fix indentation of jgroups.xml

pick 799ce28 generate ec2 configuration out of subsystems-ha.xml and subsystems-full-ha.xml to avoid discrepancies

5. 编辑并保存文件,然后会进入一个编辑器以合并提交消息。进行合并后保存/退出文本文档

6. 完成,你的提交已经被修改了。

感谢http://git-scm.com/book/en/Git-Tools-Rewriting-History提供的方法。还有其他有用的演示git技巧。

我之前没有意识到可以在rebase文件中重新排序行。这是一个很棒的提示!

如果有人不熟悉在终端中编辑文件的vi命令,这个页面是一个非常好的参考cs.colostate.edu/helpdocs/vi.html

在重新排序行时要小心:如果你不小心剪切并忘记粘贴:那个提交就会消失!

0
0 Comments

如何修改旧的Git提交?

出现的原因:

有时候我们在提交代码之后会发现有一些错误或者需要做一些调整。在Git中,一旦提交代码就无法直接修改。因此,我们需要找到一种方法来修改旧的Git提交。

解决方法:

一种方法是使用git rebase -i命令,这是一种手动的方法,非常有用,特别是当你想要重新排列多个提交,包括合并或拆分其中一些提交时。它的主要优点是你不必一次决定每个提交的命运。在整个过程中,你还可以使用所有Git的功能,而不像在rebase过程中那样受限。例如,你可以随时显示原始和重写历史的日志,甚至可以进行另一次rebase!

具体步骤如下:

1. 首先,我们假设你的历史记录如下:

x - A - B - C

| |

| master

|

origin/master

2. 然后,我们将重新创建它,变为:

x - A - B*- C'

| |

| master

|

origin/master

3. 执行以下命令:

git checkout B       # 将工作树切换到提交B的状态
git reset --soft A   # 告诉Git我们正在处理B提交之前的工作
git checkout -b rewrite-history   # 切换到一个新的分支以备份历史记录

4. 现在,可以使用git addgit add -igit stash等)来改进旧的提交。甚至可以将旧的提交拆分成两个或更多个。

5. 执行以下命令:

git commit           # 重新创建提交B(结果为B*)
git cherry-pick C    # 将C复制到新的分支(结果为C')

6. 最后的结果如下:

x - A - B - C

| \ |

| \ master

| \

| B*- C'

| |

| rewrite-history

|

origin/master

7. 最后,可以使用以下命令完成操作:

git checkout master
git reset --hard rewrite-history  # 将此分支设置为master

或者只使用一个命令:

git branch -f master  # 将此位置设置为master分支的新末端

8. 最后一步是删除临时分支:

git branch -d rewrite-history

到此为止,你现在可以push你的进度了。

0
0 Comments

如何修改较早的Git提交?

在使用Git进行版本控制时,有时我们可能需要修改之前的提交。这可能是由于错误的提交信息、遗漏的文件或不完整的更改等原因。在这种情况下,我们可以使用Git的rebase命令来修改较早的提交。

下面是修改较早的Git提交的步骤:

1. 打开终端或命令行工具,并导航到项目目录。

2. 运行以下命令来打开交互式rebase界面:

git rebase -i HEAD^^^

3. 在rebase界面中,将需要修改的提交标记为"edit"或"e"(替换"pick")。然后保存并退出编辑器。

4. 现在进行必要的更改,可以添加、删除或修改文件。

5. 运行以下命令来添加更改到暂存区:

git add .

6. 运行以下命令继续rebase过程:

git rebase --continue

7. 如果需要删除某些选项,可以在提交命令中省略它们。如果需要调整提交信息,可以省略"--no-edit"选项。

8. 在rebase过程中,可以使用git stash命令或git stash -p(交互式)命令方便地应用更改到较早的提交。

9. 注意,不需要在git add后再执行git commit命令,只需要运行git rebase --continue即可保留更改。

10. 如果您使用的是像zsh这样的shell,可能会将"^"解析为模式。在这种情况下,可以使用"~"代替。

11. 如果要向后回退到最后N个提交,可以使用以下命令代替:

git rebase -i HEAD~N

通过以上步骤,我们可以修改较早的Git提交。这对于纠正错误或完善项目的历史记录非常有用。

0