我正在一个git分支上工作,并准备提交我的更改,所以我用一个有用的提交消息做了一个提交。然后,我心不在焉地对代码做了一些不值得保留的小更改。我现在想改变分支,但是git给了我,
错误:您对“X”进行了本地更改;不能切换分支。
我可以在不提交的情况下更改分支吗?如果是,我该如何设置呢?如果不是,我该如何解决这个问题?我想在不提交的情况下忽略较小的更改,只更改分支。
我正在一个git分支上工作,并准备提交我的更改,所以我用一个有用的提交消息做了一个提交。然后,我心不在焉地对代码做了一些不值得保留的小更改。我现在想改变分支,但是git给了我,
错误:您对“X”进行了本地更改;不能切换分支。
我可以在不提交的情况下更改分支吗?如果是,我该如何设置呢?如果不是,我该如何解决这个问题?我想在不提交的情况下忽略较小的更改,只更改分支。
当前回答
嗯,应该是这样
git stash save
git checkout branch
// do something
git checkout oldbranch
git stash pop
其他回答
这些答案都没有帮助我,因为即使在重置和保存之后,我仍然有未跟踪的文件。我必须这么做:
git reset --hard HEAD
git clean -d -f
当git stash不工作时,切换到其他分支而不提交更改。您可以使用以下命令:
Git checkout -f branch-name
跟进,
$: git checkout -f
$: git checkout next_branch
您需要一个干净的状态来更改分支。分支签出只有在不影响“脏文件”的情况下才被允许(正如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>不同,后者会触发当前分支、工作树内容和新分支之间的三方合并:这样你不会丢失正在进行的工作。
注意,如果你合并了远程分支或者有本地提交,想要回到远程HEAD,你必须做:
git reset --hard origin/HEAD
HEAD单独只会引用本地提交/合并——有几次我忘记了在重置时,当我完全打算破坏所有更改/提交并返回远程分支时,我以“您的存储库是X提交前..”结束。