Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.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中的整个分支 我要撤消此合并: 自动合并public/stylesheets/application.css 切换到上一个版本,其余的保持当前状态 我试过: git reset HEAD~1 public/stylesheet/application.css 但它似乎不起作用。当您这样做时: git reset HEAD~1 public/stylesheet/application.css 。。。将索引中文件的版本(即分阶段版本)

是否有一种方法可以撤消一个已更改文件的自动合并,而不是Git中的整个分支

我要撤消此合并:

自动合并public/stylesheets/application.css

切换到上一个版本,其余的保持当前状态

我试过:

git reset HEAD~1 public/stylesheet/application.css
但它似乎不起作用。

当您这样做时:

git reset HEAD~1 public/stylesheet/application.css
。。。将索引中文件的版本(即分阶段版本)更改为
HEAD~1
中的版本-工作副本保持不变。解释如下:


此表单将所有的索引项重置为它们在处的状态,您可能希望
git checkout commit ish--file

您不能重置单个文件,因为重置只对整个提交起作用(它基本上“忘记”较新的提交)。此外,您不能“更改”现有提交—下面将详细介绍

在您的情况下,您有几个选项:

最安全的方法是签出文件的旧版本,然后再次签入

$ git checkout HEAD~1 -- public/stylesheet/application.css
# Back at old version, change already staged
$ git commit -m "Reverted change to public/stylesheet/application.css"
这将简单地创建一个新的提交,该提交将返回意外更改,并且应该是您的首选选项,除非您确切地知道自己在做什么

其次,如上所述重置存储库,并重新签入提交:

$ git reset HEAD~1
# Now restore your file public/stylesheets/application.css
$ git commit -m "Re-checkin of the commit"
# You may use the old checkin message here
这将有效地“更改”现有提交,就像您在历史记录中有相同的提交(具有相同的描述),减去对一个文件的修改。但是,这会更改您的历史记录,因此如果您已经将原始提交推送到任何上游存储库,则不能使用此


Git不允许您以任何其他方式更改现有提交,只允许您丢弃现有提交并创建新提交。这将始终“中断”您的历史记录,并且只有在您确切知道此功能的用途以及为什么要这样做时才应使用。

我不清楚OP是否已提交合并<如果合并已经提交,code>git checkout HEAD~1肯定是正确的;如果还没有,git checkout--ours的将起作用,为您提供从合并到提交的版本。(还有逆向选择
——他们的
也存在。)你提出的第一种方法对我非常有效。谢谢
$ git checkout HEAD~1 -- public/stylesheet/application.css
# Back at old version, change already staged
$ git commit -m "Reverted change to public/stylesheet/application.css"
$ git reset HEAD~1
# Now restore your file public/stylesheets/application.css
$ git commit -m "Re-checkin of the commit"
# You may use the old checkin message here