如何放弃对分支所做的所有更改?

我在一个分支(即 design)中工作,我已经做了一些更改,但是我需要放弃所有这些更改,并重新设置它以匹配存储库版本。我认为 git checkout design会这样做,但它只是告诉我,我已经在分支 design和我有3个修改过的文件。

如何丢弃这些更改并获得远程服务器上现有的分支?

296014 次浏览

注意: 你 无法挽回这个。

尝试 git checkout -f,这将丢弃任何在 全部分支中提交的 没有本地更改。

Git 重置—— hard 可以帮助你,如果你想扔掉自上次提交以来的所有东西

如果您不希望 任何design中发生变化,并且肯定希望它只与远程分支相匹配,那么您也可以删除该分支并重新创建它:

# Switch to some branch other than design
$ git br -D design
$ git co -b design origin/design            # Will set up design to track origin's design branch

@ Will,Git 浸入式是一个很好很简单的 git 教程。它将向您展示如何撤消下列情况下的更改: 取消暂存、暂存和提交。实验室14-18

git diff master > branch.diff
git apply --reverse branch.diff

在源代码的根目录中: Git 重置。/HEAD < ——取消任何阶段性更改 Git checkout./< ——放弃任何非暂存的更改

当您想要丢弃本地分支中的更改时,可以使用 git stash 命令隐藏这些更改。

Git stash save“ some _ name”

您的更改将被保存,您可以稍后检索这些更改,如果您愿意,也可以删除它们。 这样做之后,您的分支将不会有任何未提交的代码,您可以使用 git pull 从主分支中提取最新的代码。

git checkout -f

这就足够回答你的问题了。唯一的问题是,一旦完成了,它就完成了。没有撤销的余地。

放弃所有更改的可逆方法:

我发现这个问题后,作出合并和忘记检查 发展立即之后。你猜对了: 我开始直接在 主人上修改一些文件。哦!由于我的情况几乎不是唯一的(我们都这样做过,不是吗;->) ,我将提供一个可逆的方法,我用来丢弃所有的变化,使 主人看起来像 发展

在执行 git diff以查看哪些文件被修改并评估错误范围之后,我执行:

git stash
git stash clear

在第一次存储所有更改之后,它们将被下一次清除。对 主人错误的文件所做的所有更改都消失了,奇偶校验也恢复了。

假设我现在想要恢复这些更改。我可以的。第一步是找到我刚刚清空/放弃的存储的散列:

git fsck --no-reflog | awk '/dangling commit/ {print $3}'

在学习了哈希之后,我用以下方法成功地恢复了未提交的更改:

git stash apply hash-of-cleared-stash

我实际上并不想恢复这些更改,只是想验证我可以恢复它们,所以我再次清除了它们。

另一个选项是 把存货放在不同的分支机构,而不是擦除更改。因此,在清除由于在错误的分支上工作而产生的变化方面,stash给了你很大的灵活性来从你的错误中恢复。

无论如何,如果您想要清除对分支的更改的可逆方法,那么在这个用例中,前面的方法是一种不太危险的方法。

对于其他文件,如果只想恢复对单个文件的更改:

git restore <fileName>

rm -rf <working dir>后面跟着 git clone <repo>.git怎么样

在阅读了所有这些建议之后,这正是我最终所做的,而且它工作得非常完美!

这里有很多遗留问题的答案。我将向你们展示 如何在2021年从一个分行重新开始:

当您已经进行了几十次提交和几十次文件更改,您需要重新设置

git checkout master
git pull origin master
git checkout -b feat-foo-v2 # make a second version of feat-foo branch

现在你有了一根新的树枝。但是您可能仍然做了一些仍然不错的工作,您只需要拉入 那些文件。而在您的 git 目录中:

git checkout feat-foo -- path/to/file/to/be/used.java

现在您已经从旧分支获得了单个文件的副本。再这样做几次,旧的分支就会被淘汰。现在您可以随意删除该分支,并将 feat-foo-v2重命名为 feat-foo

假设您有一个包含一些更改的文件,并且您只想引入这些更改的 一些。我建议熟悉 git checkout上的 --patch选项:

git checkout -p feat-foo -- path/to/file.java

将打开一个对话框,该对话框允许您选择要保留的文件的更改部分。

当你不能只是做一个新的分支 出于某种原因,你只是迷恋你的特色分支,你不愿意或不能放弃它。你知道你需要重置一些文件,但你不应该需要重置整个事情。创建一个全新的分支实际上只是一个不必要的步骤。我们可以把 新鲜的文件从主人那里调出来:

git checkout master -- path/to/file.java

现在文件被重置了!如果你只是想重置一个文件的 一部分--patch应该以同样的方式工作。

如果要重做/重做分支上的所有更改:

git pull origin master --rebase # or, denote the latest "base" or "master" commit on your branch
git push
git reset --soft origin/<current branch name>
# re-evaluate all your changes, tweaking them at will
git reset --soft origin/master
# commit your tweaks, push

列出要做的工作

git checkout -f


git reset --hard


git reset --hard HEAD^

要删除新添加的文件,请执行以下命令:-

Git 重置 HEAD < file >

这对于修改过的文件和新添加的文件都适用。