如何将更改的文件添加到Git中较旧的(非最新)提交中

6 浏览
0 Comments

如何将更改的文件添加到Git中较旧的(非最新)提交中

在过去的一个小时里,我已经逐步地进行了几项更改并提交了它们,但我刚刚意识到我几个提交之前忘记添加了一个更改的文件。

日志看起来是这样的:

GIT TidyUpRequests u:1 d:0> git log

commit fc6734b6351f6c36a587dba6dbd9d5efa30c09ce

作者:David Klein <>

日期:2010年4月27日 09:43:55 +0200

主程序现在同时测试两个网络服务

commit 8a2c6014c2b035e37aebd310a6393a1ecb39f463

作者:David Klein <>

日期:2010年4月27日 09:43:27 +0200

ISBNDBQueryHandler现在也使用了XPath.fs中的XPath函数

commit 06a504e277fd98d97eed4dad22dfa5933d81451f

作者:David Klein <>

日期:2010年4月27日 09:30:34 +0200

AmazonQueryHandler现在使用了在XPath.fs中定义的XPath Helper函数

commit a0865e28be35a3011d0b6091819ec32922dd2dd8 <--- 更改的文件应该放在这里

作者:David Klein <>

日期:2010年4月27日 09:29:53 +0200

分解出一些常见的XPath操作

有什么想法吗?

0
0 Comments

如何将更改后的文件添加到旧的(不是最后一个)提交中(How to add a changed file to an older (not last) commit in Git)

问题的原因:

有时候我们想要将一个更改后的文件添加到旧的提交中,而不改变旧提交的提交信息。这种情况下,我们可以使用git的一些命令来实现这个目标。

解决方法:

一种解决方法是使用以下命令:

git add 
git commit --fixup=OLDCOMMIT
git rebase --interactive --autosquash OLDCOMMIT^

其中,OLDCOMMIT是旧的提交的commit id。这个方法会将改动后的文件添加到指定的旧提交中,并保持旧提交的提交信息不变。

另一种解决方法是使用`git commit --squash=OLDCOMMIT`命令,在rebase过程中编辑旧提交的提交信息。

在使用这些命令时,需要注意的是在修改已经发布给其他人的提交之前,应该小心使用这些命令来重写git的历史记录。

以上是关于如何将更改后的文件添加到旧的提交中的详细解释。

为了自动化这个过程,我们还可以进行一些可选的配置:

- 设置GIT_SEQUENCE_EDITOR为一个脚本,以跳过交互式rebase的文本编辑器。

- 创建一个git别名,用于自动执行所有队列中的fixup操作。

- 创建一个git别名,用于自动执行单个提交的fixup操作。

以上是关于如何将更改后的文件添加到旧的提交中的解决方法。这些方法可以帮助我们在不改变旧提交的提交信息的情况下,将改动后的文件添加到旧提交中。但是,在使用这些命令时,需要小心操作,以避免对已经发布给其他人的提交造成影响。

0
0 Comments

如何将已更改的文件添加到Git中的较旧(非最后)提交?

有时候我们会遇到这样的情况:我们已经对一个文件进行了修改,但是这个修改并不是在最后一次提交中进行的。在这种情况下,我们需要将这个修改后的文件添加到一个较旧的提交中。

解决这个问题的方法是使用git rebase。具体步骤如下:

1. 使用git stash将要添加的更改存储起来。

2. 使用git rebase -i HEAD~10(或者你想要查看多少个提交之前的提交)。

3. 将涉及的提交(如a0865...)标记为编辑,即将行首的pick改为edit。不要删除其他行,因为那样会删除这些提交。

4. 保存rebase文件,git会退回到shell并等待你修复那个提交。

5. 使用git stash pop恢复之前存储的更改。

6. 使用git add 添加你的文件。

7. 使用git commit --amend --no-edit修改提交。

8. 使用git rebase --continue将剩下的提交重新写入新的提交。

9. 如果你标记了多个提交进行编辑,则重复从第2步开始的操作。

10. 如果你之前将修改的提交推送到其他地方,则需要再次使用--force选项来更新远程提交。然而,使用--force选项需要谨慎,如果你不小心并且没有与他人进行协调,很容易丢失其他人的工作。

如果你使用vim编辑器,你需要按下Insert键进行编辑,然后按下Esc键并输入:wq保存文件,退出编辑器并应用更改。或者,你可以使用git config --global core.editor "nano"命令配置一个用户友好的git提交编辑器。

如果你有未暂存的更改想要添加到编辑中,你可以在涉及的提交上恢复这些更改,这样就可以正常工作了。

注意:在将提交标记为编辑时,不要删除文件中列出的其他提交。如果删除了这些提交,你需要按照这些步骤来恢复它们。

另外,如果你已经将分支推送到远程仓库,那么在推送时你需要使用--force选项(注意使用--force选项可能会有风险,可能会丢失其他人的工作)。具体细节可以参考这里。

这个逐步指南非常有帮助!补充一下,第10步是执行git push -f命令将其推送到远程仓库。记住,在这种情况下需要使用-f选项来强制推送。此外,在上述步骤之后,所有N个提交的日期时间都将被重置。

我认为这是最清晰的解决方案,而无需修复提交!

虽然这个方法需要更多的命令,但我发现这是最清晰和易于理解的解决方案。谢谢!

很好的逐步指南。只需要注意,在第8步中,如果你没有将所有修改的文件添加到修改后的提交中,你可能需要再次执行git stash。

需要注意的是,如果你已经将这个分支推送到远程仓库,你将会编辑所有已经获取你的分支的人的历史记录。了解这个影响很重要。另外,如果你担心这些影响,了解--force-with-lease选项也是值得的。

以上就是如何将已更改的文件添加到较旧的提交中的解决方法。希望对你有所帮助!

0
0 Comments

如何将更改过的文件添加到旧的(不是最后一个)提交中的原因是,用户想要将一个更改过的文件添加到一个早期的提交中。解决方法是使用git rebase命令。

使用git 1.7版本,可以使用git rebase命令的一个简单方法:

1. 添加要提交的文件:git add $files

2. 创建一个新的提交,并重新使用"broken"提交的提交消息:git commit -c master~4

3. 在主题行中添加fixup!(如果要编辑提交消息,请使用squash!):fixup! Factored out some common XPath Operations

4. 使用git rebase -i --autosquash命令来修复提交:git rebase -i --autosquash

5. 如果出现错误提示“You asked me to rebase without telling me which branch you want to rebase against, and 'branch.master.merge'”,需要提供要rebase的提交:git rebase -i --autosquash HEAD~10

要自动添加fixup!或squash!用于--autosquash,请使用--fixup=或--squash=

需要注意的是,创建一个新的提交时,可以使用master~4或HEAD~4或任何n-number,n是要更改的先前提交的数量。

0