如何在SourceTree中放弃未提交的更改?

101

我是Git环境的新手,正在Mac上使用BitBucket和SourceTree。现在我想要做的就是放弃自上次提交以来所做的更改。我应该如何操作?我没有找到类似于“放弃更改”的东西,而直接从上一个提交中pull也似乎不起作用。使用图形界面或命令行实现都可以。


你的意思是想要撤销最后一次提交吗?还是保留它并且检出前一个提交,例如进行一些测试原因? - Mohammad AbuShady
1
@MohammadAbuShady 我猜答案都不是。自从上次提交以来,我做了一些想要放弃的更改。我想要回到我的最后一次提交。 - goldfrapp04
你有未提交的更改,想要撤销吗? - Mohammad AbuShady
没有任何答案帮助我删除Sourcetree顶部烦人的“未提交更改”条目。并且有太多未暂存的文件需要逐个丢弃。这个回答在这里有效:https://dev59.com/9WYq5IYBdhLWcg3w8U-8 - PVS
当我右键单击未暂存文件列表中的项目时,我对上下文菜单选项感到困惑;Discard(Shift+Ctrl+R)和Remove(Ctrl+Del)。我猜Discard将撤消更改,就像git reset --hard一样,而Remove将删除文件并将其标记为已删除。 - Nate Anderson
9个回答

153
在Mac上的SourceTree中,右键单击您想要丢弃的文件(在“工作树中的文件”列表中),然后选择“重置”。
在Windows上的SourceTree中,右键单击您想要丢弃的文件(在“工作副本更改”列表中),然后选择“放弃”。
在git上,您只需执行以下操作:
使用“git reset --hard”来丢弃对版本化文件所做的更改;
使用“git clean -xdf”来擦除新的(未跟踪的)文件,包括被忽略的文件(选项“x”)。 “d”用于删除未跟踪的目录,“f”用于强制执行。

10
您还可以在左侧面板上右键单击整个“Working Copy”(或按下Cmd+Shift+R);-) - Geo
15
同一条命令在Mac和Windows中有不同的名称,这真是太神奇了。仿佛相较于命令行,Git GUI已经够令人困惑了。 - NSTJ
谢谢!我认为这应该被投票选为正确答案;-) - Hernan Arber
@NSTJ:同意……这几乎动摇了人们对于在Git工具中为“重置”和“丢弃”等术语分配一致定义的可能性的信心。也就是说,一个你可以期望得到广泛认可的定义。 - LarsH
非常小心 git clean -xdf 命令,它可能会造成很大的损失。 - SMBiggs

66

我喜欢使用

git stash

这个命令将所有未提交的更改存储在stash中。如果您想要稍后放弃这些更改,只需使用git stash drop(或者使用git stash pop来恢复它们)。

尽管从技术上讲,这不是“正式”丢弃更改的方法(正如其他答案和评论所指出的那样)。

SourceTree:在顶部栏上单击“Stash”图标,键入其名称并创建。然后在左侧垂直菜单中,您可以“显示”所有Stash并在右键菜单中删除它们。在ST中可能没有其他一次性丢弃所有文件的方法。


7
如果您希望彻底丢弃所有更改,只需运行git reset --hard HEAD即可。 - Mohammad AbuShady
4
我认为我的答案是“错误”的,因为滥用了“stash”功能。Mohammad的答案是正确且合适的,可以丢弃所有更改。 - Max
是的,还因为我看不到快捷方式在哪里。 - Roberto
3
我喜欢这种方法,因为它可以让你在改变主意时有最后一次还原的机会。我很少使用 "reset --hard" 命令,但经常使用 "stash" 命令来保存我的更改以便开始一个新的工作,并在后续确定不需要它们时舍弃这些更改。 - Max
如果您因某种原因想要放弃对工作目录中文件所做的所有更改,或者该文件已被意外删除。如果文件已更改、重命名或删除,则它将显示在SourceTree的“未暂存文件”列表中。如果已删除或重命名,则会显示为减号。要立即将文件恢复到最后同步状态,请右键单击SourceTree未暂存列表中的文件,然后选择“放弃”。现在应该没有任何更改了,如果文件被意外删除,则应该已经恢复。 - flodis
显示剩余3条评论

15

按照以下步骤在Sourcetree中丢弃多个未提交的更改。

Sourcetree的新版本没有像之前的答案中提到的-重置按钮-. 因此,请遵循以下5个步骤解决问题。

  1. 右键单击“文件状态”并单击“重置...”。

enter image description here

  1. 选择文件如果您愿意,可以像下面的图片一样选择所有文件。

enter image description here

  1. 点击“全部重置”。

enter image description here

  1. 再次点击“全部重置”。

enter image description here

  1. 点击"重置"按钮。

输入图像描述

干得好..! 不再有302个文件需要丢弃。

输入图像描述


1
感谢您的回复,已经适用于最新的SourceTree版本,2021年。 - Mohammad Daihan

9

在未暂存的文件上,点击右侧的三个点。一旦你点击它,一个弹出式菜单将会出现,在那里你可以选择放弃文件


2
这在只有几个文件时还好,但当有很多文件时会发生什么? - Itai Spector

4

我注意到我的问题已经在问题标题中得到了回答。

要取消暂存的文件,请使用

git reset HEAD /file/name

取消对文件的更改

git checkout -- /file/name

如果您有一个文件夹里的一批文件,您可以撤销整个文件夹。
git checkout -- /folder/name

请注意,所有这些命令都已在git status中显示。
这里我创建了一个虚拟存储库,并列出了所有3种可能性。
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   test
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   test2
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       test3

4

在Windows的SourceTree中很简单,但是在macOS上我也搜索了一段时间...

在SourceTree中按下Command + Shift + R,会弹出一个隐藏的窗口,让你丢弃某个文件或所有文件!为什么这是隐藏的呢?我们永远不知道...但它确实有效!

enter image description here


3

从Sourcetree图形界面中点击“工作目录”,右键单击您要丢弃的文件,然后点击“丢弃”


1

按照以下步骤操作:

  • 点击 commit
  • 按下 CMD+A 选择所有想要 删除或丢弃 的文件
  • 右键单击 所选择的未提交文件,选择想要删除的文件
  • 从下拉列表中选择 Remove

这将删除现有的文件,而不是放弃更改! - Fritzz

0

这是 Ctrl + Shift + r

对我来说,只有一个选项可以放弃所有。

enter image description here


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