Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/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,我意识到我在以前承诺的改变中犯了一个错误。还有几个其他的提交依赖于这个(错误的)提交 我可以修改它并将这些更改传播到工作副本吗?如果已推送提交,您可以通过 git revert <commit hash> git还原 为了获得提交散列,只需使用git log命令就可以了,但我不想这样做。改变过去有副作用。您的分支或提交树不会是快进的,您必须覆盖服务器上的分支(如果有的话)。换句话说,除非你是最后一个看到它的人,而且它只在你的电脑上。这可能会产生更多的问题,如果出现任何问题,你就有

我意识到我在以前承诺的改变中犯了一个错误。还有几个其他的提交依赖于这个(错误的)提交


我可以修改它并将这些更改传播到工作副本吗?

如果已推送提交,您可以通过

git revert <commit hash>
git还原

为了获得提交散列,只需使用
git log
命令

就可以了,但我不想这样做。改变过去有副作用。您的分支或提交树不会是快进的,您必须覆盖服务器上的分支(如果有的话)。换句话说,除非你是最后一个看到它的人,而且它只在你的电脑上。这可能会产生更多的问题,如果出现任何问题,你就有失去东西的风险

如果你准备好进入时间旅行和另类现实的世界

欢迎来到
git-rebase

首先要开始,创建一个新的分支,在那里你想要重新设置基础,这将创建一个你想要更改的分支的副本,以防出现任何错误,只要删除基础,任何事情都不会改变。您可以只注意提交散列

最简单的入门方法是使用
git-rebase-i HEAD~N
,其中N是过去要更改的提交次数

它应该打开一个编辑器,您可以将每行的第一个单词更改为类似“编辑”的内容。然后保存文件,然后重新定基

重定基址时,您可以执行任何更改、添加文件、删除文件等操作。提交时,如果没有冲突,则应自动继续。一旦所有的事情都完成了,那个么你们将有一个重定基础的分支,其中的commit要么被删除,要么被编辑,要么被重命名,或者是你们想要的任何东西。如果一切顺利的话。删除旧分支(未重定基址)推送新的重定基址分支,瞧

编辑 除非它不是很清楚,当它打开编辑器时。删除一行将删除选定的提交。如果您删除文件中的所有内容,它将不起任何作用。在重定基期的任何时候,您都可以中止它,git项目的状态不应该改变。重新定基是一件非常安全的事情,因为它实际上不会改变任何事情。如果保留对旧提交的引用,则它们不会消失。重定基址后,它会创建一个替代路径。您将拥有一条旧路径和一条新路径。旧路径可能会被取消引用,任何引用到此旧路径的内容都应移动到新路径

重要的 顺便说一句,我要做的一件事是,只提交一些修复旧提交的东西。我认为,只有在需要时才使用重新基。例如,当您的同事意外提交4gb数据库备份时。

(关于修改公共历史记录的常见警告…)

考虑到修改提交的需要,最简单的方法之一如下:

1) 使用
git checkout
检查要修改的提交(使用
gitk
git log
查找正确的SHA)

2) 使用
git checkout-b
在此提交时创建一个新分支

3) 根据需要修改代码

4) 使用
git commit--amend
修改提交

5) 执行“到”重基,将原始分支中的其余提交跨行移动。要执行此操作,请在从上面修改更改提交之前重新调用更改提交的SHA,然后:

  • 使用
    git checkout
    切换到原始分支
  • 运行
    git-rebase--on
这将产生在新分支之上的原始分支上的SHA之后重播提交的效果。在重设基础期间,您可能需要解决合并冲突(与往常一样)

6) 使用
git branch-d
删除新分支


像往常一样,在这种情况下,查看
gitk
中发生的事情,以确保它是您所想的,并且(为了安全起见)在进行重新基础之前标记原始分支。

首先进行更改并作为
修复提交!原件的提交消息

然后决定你想在回购协议中看到什么(以及允许看到什么)。 如果你不被允许重写历史,那就到此为止吧,你尽了一切可能

如果允许,则在原始提交的父级上启动交互式重基。您将看到前两个条目“拾取原始”和“修复”。将所有其他提交设置为“编辑”,然后启动


该过程将在每次进一步提交时停止,在这里编译、重写内容以了解更改,工作正常。并使用
rebase--continue
。然后强制推送分支(并执行为历史重写案例规定的所有仪式)。

您还可以使用
git commit--fixup original-sha1
而不是复制/粘贴原始提交主题。