git:切换分支,忽略任何更改而不提交

我正在一个git分支上工作,并准备提交我的更改,所以我用一个有用的提交消息做了一个提交。然后,我心不在焉地对代码做了一些不值得保留的小更改。我现在想改变分支,但是git给了我,

错误:您对“X”进行了本地更改;不能切换分支。

我可以在不提交的情况下更改分支吗?如果是,我该如何设置呢?如果不是,我该如何解决这个问题?我想在不提交的情况下忽略较小的更改,只更改分支。

532136 次浏览

如果您对文件进行了更改,而Git在切换分支时也需要更改这些更改,它就不会允许您更改。要放弃工作中的更改,请使用:

git reset --hard HEAD

然后,您将能够切换分支。

您需要一个干净的状态来更改分支。分支签出只有在不影响“脏文件”(如注释中的查尔斯·贝利注释)的情况下才被允许。

否则,你应该:

  • 您当前的变化或
  • reset --hard HEAD(如果你不介意失去那些微小的变化)或
  • checkout -f(当切换分支时,即使索引或工作树与HEAD不同,也要继续。这用于丢弃局部更改。)

或者,最近:

即使索引或工作树与HEAD不同也要继续 索引和工作树都被恢复以匹配交换目标。< / p >

这与git switch -m <branch-name>不同,后者会触发当前分支、工作树内容和新分支之间的三方合并:这样你不会丢失正在进行的工作。

跟进,

$: git checkout -f


$: git checkout next_branch

如果您想放弃更改,

git checkout -- <file>
git checkout branch

如果你想保留这些变化,

git stash save
git checkout branch
git stash pop

嗯,应该是这样

git stash save
git checkout branch
// do something
git checkout oldbranch
git stash pop

注意,如果你合并了远程分支或者有本地提交,想要回到远程HEAD,你必须做:

git reset --hard origin/HEAD

HEAD单独只会引用本地提交/合并-几次我都忘记了,当我完全打算核化所有更改/提交并返回远程分支时,重置并以“您的存储库是X提交前..”结束。

切换到一个新的分支丢失更改:

git checkout -b YOUR_NEW_BRANCH_NAME --force

切换到现有分支会丢失更改:

git checkout YOUR_BRANCH --force

关闭终端,删除项目所在的文件夹,然后再次克隆您的项目和voilá。

这些答案都没有帮助我,因为即使在重置和保存之后,我仍然有未跟踪的文件。我必须这么做:

git reset --hard HEAD
git clean -d -f

如果您希望保留更改并在单行命令中更改分支

git stash && git checkout <branch_name> && git stash pop

简单的答案:

是强制签出分支吗

git checkout -f <branch_name>

强制签出分支是告诉git放弃当前分支中所做的所有更改,并签出所需的分支。

或者万一你在检查一个提交

git checkout -f <commit-hash>

< br >

"认为我可以在不提交的情况下更改分支。如果是,怎么做 我能安排一下吗?如果不是,我该如何解决这个问题?" < / p >

答案是没有,这就是Git的哲学,你可以跟踪所有的更改,并且每个节点(即提交)都必须是最新的,除非你已经进行了新的提交。

< br >

你决定留着零钱?

然后把它们藏起来

git stash

然后使用

git stash apply

这将应用你的变化,但保持他们在stash队列太。如果你不想把它们放在藏物堆里,那就用它们把它们弹出

git stash pop

这相当于applydrop

将未提交的更改移动到新的分支

我为此创建了一个.gitconfig别名:

[alias]
spcosp = !"git stash push && git checkout \"$@\" && git stash pop --index #"

要更改为new-branch-name,使用:

git spcosp new-branch-name

任何未提交的文件和索引更改都将被保留。

Git checkout -f your_branch_name

git checkout -f your_branch_name

如果您在恢复更改时遇到困难:

git checkout .

如果您想删除未跟踪的目录和文件:

git clean -fd

当git stash不工作时,切换到其他分支而不提交更改。您可以使用以下命令:

Git checkout -f branch-name

遵循以下步骤:

  1. Git stash save将保存所有的更改,即使您在分支之间切换。
git stash save
  1. Git签出任何其他分支,现在因为你保存了你的更改,你可以移动任何分支。上面的命令将确保您的更改被保存。
git checkout branch
  1. 现在,当您回到分支时,使用这个命令取回所有更改。
git stash pop

为你的精神平静 (为了更容易地访问你做分支切换时未提交的更改)

在切换之前:

git checkout <next_branch>

使用

git stash save "brief description of changes"

而不是默认值:

git stash
// or
git stash save

如果你的git stash list是一个较长的列表,这是有回报的 并且必须切换回某个开始于此的先前想法