Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/forms/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 如何撤消任意提交中的更改?_Git - Fatal编程技术网

Git 如何撤消任意提交中的更改?

Git 如何撤消任意提交中的更改?,git,Git,我有一些提交,它是在HEAD之前的几个提交。在提交时,有一些我没有注意到的变化。通过查看我的git日志我注意到了这些不必要的更改。在google中搜索“撤消对任意提交的更改”,会返回许多关于撤消整个提交和删除索引中更改的结果。但是,在这个任意提交中删除这些更改的方法是什么 首先,确保你的工作树是干净的。帮你找到这个。它不应报告等待提交的任何更改。如果有更改,您可以提交它们(如果需要,可以在临时分支中提交),也可以提交它们 确保工作树是干净的后,在当前提交上创建一个分支,但不要将其签出: $ gi

我有一些提交,它是在
HEAD
之前的几个提交。在提交时,有一些我没有注意到的变化。通过查看我的
git日志
我注意到了这些不必要的更改。在google中搜索“撤消对任意提交的更改”,会返回许多关于撤消整个提交和删除索引中更改的结果。但是,在这个任意提交中删除这些更改的方法是什么

首先,确保你的工作树是干净的。帮你找到这个。它不应报告等待提交的任何更改。如果有更改,您可以提交它们(如果需要,可以在临时分支中提交),也可以提交它们

确保工作树是干净的后,在当前提交上创建一个分支,但不要将其签出:

$ git branch backup
实际上并不需要它,您可以使用reflog,但是这样更容易(也更明显)<代码>备份只是我为分支选择的一个名称,它没有什么特别之处;唯一的限制是它不能已经存在

假设您希望在过去修改第三次提交,请运行:

$ git rebase --interactive HEAD~4
Git在默认编辑器中打开一个临时文件,其内容如下:

pick 7f0c5e794 the commit you want to change
pick 9f96dcae9 commit message #2
pick 02ed04062 commit message #3
pick beac35780 the most recent commit
这是重设基地的计划。当然,它包含最近三次提交的哈希和主题。它们是按时间顺序排列的最后四次提交(因为
头4

编辑要修改的提交的行(第一行);将
拾取
更改为
编辑
,然后保存文件并退出编辑器

当您退出编辑器时,Git开始重定基址。它将签出提交
HEAD~3
并退出,允许您按照计划中的要求
编辑提交

进行所需的更改,然后运行
git commit--amend
修改提交(您的目标)。进行更改的最佳方法是运行:

$ git reset --mixed HEAD~1
这将使repo处于您要修改的提交之前的状态,工作树中的文件已更改,索引中未添加任何内容。仅将所需的文件添加到索引中并提交(不添加
--amend
)。这是您想要的“已编辑”1提交

编辑提交后,工作树中仍有未提交的更改。您必须提交它们(创建原始历史记录中不存在的新提交)、隐藏它们(并在完成重基后应用它们)或完全丢弃它们(
git reset--hard
执行;确保在运行此命令之前确实不需要它们)

以某种方式解决未提交更改的问题后,运行:

$ git rebase --continue
Git继续重设基础;它按照您在计划中告诉它的方式处理其他提交。我们的计划提到为其他提交选择
pick
,这意味着Git只应用您不想修改的这些提交的更改

如果一切顺利,在该命令完成后,您将有一个新的历史记录行,看起来就像您想要的一样。如果它看起来不像你想要的,你可以跑

$ git reset --hard backup
回到你开始的地方,重新开始

如果rebase没有成功完成(可能会遇到冲突),您可以通过运行
git-rebase--abort
来中止它。Git将撤消所有更改,您将从哪里开始(在
backup
分支指向的提交上)

或者,您可以解决冲突,提交并运行
git-rebase--continue
,直到rebase完成

以这种或那种方式结束重新基址并且对结果感到满意或放弃更改过去提交的想法后,运行
git branch-D backup
删除备份分支


1 Git提交是不可变的。无法编辑提交。“编辑”提交实际上会创建一个新的提交,而不是旧的提交。当然,新提交的哈希值与原始提交的哈希值不同


旧的提交仍然存在于存储库中,可以通过其哈希或使用分支进行访问。如果没有可用于访问它的分支,并且中没有对它的引用,则提交对象将在下一个垃圾回收周期中删除。

首先,确保工作树是干净的。帮你找到这个。它不应报告等待提交的任何更改。如果有更改,您可以提交它们(如果需要,可以在临时分支中提交),也可以提交它们

确保工作树是干净的后,在当前提交上创建一个分支,但不要将其签出:

$ git branch backup
实际上并不需要它,您可以使用reflog,但是这样更容易(也更明显)<代码>备份
只是我为分支选择的一个名称,它没有什么特别之处;唯一的限制是它不能已经存在

假设您希望在过去修改第三次提交,请运行:

$ git rebase --interactive HEAD~4
Git在默认编辑器中打开一个临时文件,其内容如下:

pick 7f0c5e794 the commit you want to change
pick 9f96dcae9 commit message #2
pick 02ed04062 commit message #3
pick beac35780 the most recent commit
这是重设基地的计划。当然,它包含最近三次提交的哈希和主题。它们是按时间顺序排列的最后四次提交(因为
头4

编辑要修改的提交的行(第一行);将
拾取
更改为
编辑
,然后保存文件并退出编辑器

当您退出编辑器时,Git开始重定基址。它将签出提交
HEAD~3
并退出,允许您按照计划中的要求
编辑提交

进行所需的更改,然后运行
git commit--amend
修改提交(您的目标)。进行更改的最佳方法是运行:

$ git reset --mixed HEAD~1
这使repo处于您要修改的提交之前的状态,工作树中的文件已更改,而ind中未添加任何内容