我正在使用git分支并准备提交我的更改,因此我使用有用的提交消息进行了提交。然后我心不在焉地对不值得保留的代码做了一些小改动。我现在想改变分支,但是git给了我,
错误:您对“X”进行了本地更改;不能切换分支。
我以为我可以在不提交的情况下更改分支。如果是这样,我该怎么设置呢?如果没有,我该如何摆脱这个问题?我想在没有提交的情况下忽略这些微小的变化,只是改变分支。
答案 0 :(得分:352)
你需要一个干净的状态来改变分支。只有在不影响“脏文件”(如评论中的Charles Bailey备注)的情况下才允许分支结帐。
否则,您应该:
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 .
如果要删除未跟踪的目录和文件:
git clean -fd
答案 11 :(得分:2)
请按照以下步骤操作:
git stash save
git checkout branch
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分支名称