撤销特定的旧提交

3
嗨,我在Bitbucket上有一个代码库。我和一个合作伙伴一起工作,在几个提交之前,他更新了一些内容,但是在处理文件时,我发现他写错了代码。我想回滚那个提交,只恢复那个文件的代码。cartitems.blade.php 这可能吗?
附上SourceTree工具的图片。未提交的更改是我的新更改。我想保留这些更改并仅恢复那个特定的文件。

enter image description here

5个回答

10

您可以使用git revert来撤销特定提交的影响,并创建一个撤销更改的新提交。

在这种情况下

git revert 797832c

将自动创建一个提交,其中包含已反转的更改。


5
要只还原 cartitems.blade.php 文件(不是整个提交)时,你可以检出 "坏" 提交之前的文件版本:
git checkout 41123f6 -- resources/views/cart/cartitems.blade.php

现在,请确保没有其他文件被准备提交,然后提交该文件:
git add resources/views/cart/cartitems.blade.php
git commit -m "Revert cartitems.blade.php"

这样就不必重写历史记录了。我不确定是否可以在SourceTree GUI中实现此操作。您可以使用SourceTree右上角的"Terminal"按钮打开终端。


0

就像完全消除最后一次提交,让它好像从未发生过一样?

假设更改已经在您的主分支上:

git checkout master git reset --hard HEAD~1 git push origin master

这应该就足够了。


1
也许是强制推送? - undefined
git push -f origin master, 顺带一提... 如果你不加上 -f 参数的话,git 会抱怨,因为 origin/master 已经超过了你现在尝试放置分支的点。 - undefined
我正在使用SourceTree,而不是直接使用git终端。 - undefined

0
如果你已经将它推送到你的代码库,并且你正在一个大团队中工作,请小心,因为这样做可能会导致你的同事遇到一些令人沮丧的合并冲突。

0

最好创建一个具有特定提交的新分支,并发送一个PR到你需要的分支,因为旧分支中有旧更改以及你的新分支中的新还原更改。

git checkout -b fix/revert-change 7978732

然后使用 git push 将新分支推送到远程


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接