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

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

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


当前回答

简单的答案:

是强制签出分支吗

git checkout -f <branch_name>

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

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

git checkout -f <commit-hash>

“我认为我可以不用承诺就可以改变分支。如果是,怎么做 我能安排一下吗?如果不是,我该如何解决这个问题?”

答案是否定的,这就是Git的哲学,你要跟踪所有的更改,并且每个节点(即提交)必须与你所做的最新更改保持一致,当然,除非你已经进行了新的提交。

你决定留着零钱?

然后把它们藏起来

git stash

然后使用

git stash apply

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

git stash pop

这相当于apply然后drop

其他回答

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

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

git reset --hard HEAD

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

简单的答案:

是强制签出分支吗

git checkout -f <branch_name>

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

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

git checkout -f <commit-hash>

“我认为我可以不用承诺就可以改变分支。如果是,怎么做 我能安排一下吗?如果不是,我该如何解决这个问题?”

答案是否定的,这就是Git的哲学,你要跟踪所有的更改,并且每个节点(即提交)必须与你所做的最新更改保持一致,当然,除非你已经进行了新的提交。

你决定留着零钱?

然后把它们藏起来

git stash

然后使用

git stash apply

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

git stash pop

这相当于apply然后drop

您需要一个干净的状态来更改分支。分支签出只有在不影响“脏文件”的情况下才被允许(正如Charles Bailey在评论中所说的那样)。

否则,你应该:

把你现在的零钱藏起来 重置-硬头(如果你不介意失去那些微小的变化)或 checkout -f(当切换分支时,即使索引或工作树与HEAD不同,也要继续执行。这用于丢弃局部更改。)

或者,最近:

使用Git 2.23(2019年8月)和新的命令Git开关: Git开关-f <branch-name> (-f是——force的缩写,是——discard-changes的别名)

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

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

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

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