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

时间:2009-08-20 07:56:05

标签: git branch git-checkout

我正在使用git分支并准备提交我的更改,因此我使用有用的提交消息进行了提交。然后我心不在焉地对不值得保留的代码做了一些小改动。我现在想改变分支,但是git给了我,

  

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

我以为我可以在不提交的情况下更改分支。如果是这样,我该怎么设置呢?如果没有,我该如何摆脱这个问题?我想在没有提交的情况下忽略这些微小的变化,只是改变分支。

15 个答案:

答案 0 :(得分:352)

你需要一个干净的状态来改变分支。只有在不影响“脏文件”(如评论中的Charles Bailey备注)的情况下才允许分支结帐。

否则,您应该:

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

答案 1 :(得分:112)

如果您要放弃更改,

git checkout -- <file>
git checkout branch

如果您想保留更改,

git stash save
git checkout branch
git stash pop

答案 2 :(得分:59)

好吧,它应该是

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

答案 3 :(得分:15)

关注,

$: git checkout -f

$: git checkout next_branch

答案 4 :(得分:13)

请注意,如果您已合并远程分支或拥有本地提交并想要返回远程HEAD,则必须执行以下操作:

git reset --hard origin/HEAD
单独

HEAD只会引用本地提交/合并 - 有几次我忘记了重置并最终“你的存储库是X提前提交...”当我完全想要核对所有更改时/提交并返回远程分支。

答案 5 :(得分:8)

如果您对切换分支时Git也需要更改的文件进行了更改,则不会让您这样做。要放弃工作更改,请使用:

git reset --hard HEAD

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

答案 6 :(得分:5)

这些答案都没有帮助我,因为即使重置和藏匿后我仍然没有跟踪文件。我不得不这样做:

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

答案 7 :(得分:3)

切换到失去更改的新分支:

git checkout -b YOUR_NEW_BRANCH_NAME --force

切换到现有分支失去更改:

git checkout YOUR_BRANCH --force

答案 8 :(得分:2)

关闭终端,删除项目所在的文件夹,然后再次克隆项目并发表意见。

答案 9 :(得分:2)

如果要保留更改并在单行命令中更改分支

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

答案 10 :(得分:2)

git checkout -f your_branch_name

git checkout -f your_branch_name

如果您无法恢复更改:

git checkout .

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

git clean -fd

答案 11 :(得分:2)

请按照以下步骤操作:

  1. Git隐藏存储将保存所有更改,即使您在分支之间切换也是如此。
git stash save
  1. Git签出其他任何分支,现在,由于您保存了更改,因此可以在任何分支附近移动。上面的命令将确保您的更改已保存。
git checkout branch
  1. 现在,当您返回分支时,请使用此命令将所有更改取回。
git stash pop

答案 12 :(得分:1)

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

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

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

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

git spcosp new-branch-name

所有未提交的文件和索引更改都将保留。

答案 13 :(得分:0)

简单答案:

是强制结帐分支

git checkout -f <branch_name>

强制检出一个分支是告诉git放弃您在当前分支中所做的所有更改,然后检出所需的更改。

或者如果您要检查提交

git checkout -f <commit-hash>


  

”认为我可以更改分支而无需提交。如果这样,如何   我可以设置吗?如果没有,我如何摆脱这个问题?”

答案是,这就是Git的基本理念,您可以跟踪所有更改,并且每个节点(即提交)都必须是最新的。您所做的更改,除非您当然进行了新的提交。


您决定保留更改?

然后将它们藏起来

git stash

,然后在

中取消存储您想要的分支中的更改
git stash apply

这将应用您的更改,但也将其保留在存储队列中。如果您不想将它们保留在存储堆栈中,请使用

弹出它们
git stash pop

相当于apply,然后等于drop

答案 14 :(得分:0)

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

git checkout -f分支名称

相关问题