【问题标题】:Git merged without me asking? Why?Git 没有我问就合并了?为什么?
【发布时间】:2011-10-31 00:52:54
【问题描述】:

我在做master,完成了我需要做的事情,然后做了

git commit -am "message".

我想测试写一个新功能,所以我做了:

git branch NewFeature

紧随其后

git checkout NewFeature

然后我对版本控制文件进行了更改,回到 git 并做了

git checkout master

我忘记将这些更改提交到 NewFeature 分支。我的错,是的,但是环顾四周,似乎没有 -f 标志应该失败。不幸的是,它只是将我的更改与 master 合并。自然我吓坏了,然后做了

git reset --hard head

当我切换回来时,我似乎失去了在 NewFeature 分支上所做的所有工作!我做错了什么?

【问题讨论】:

  • 没有回答你的问题,但是你的两个命令可以合并成git checkout -b NewFeature。 (如果不完全等价,几分钟后有人会指出来。)
  • 谢谢,我会记住的。

标签: git


【解决方案1】:

这是正常行为。

如果您在分支之间没有冲突更改,git 只需在您结帐时“移动”更改。 Git 应该会在结帐后向您显示移动文件的摘要。

执行git reset --hard HEAD 将恢复您的更改。

更多信息

如果您有未提交的更改,但您想在不同的分支中处理其他事情,您可以隐藏您的更改以备后用。 See stash docs.

  • git stash
  • git checkout <branch>
  • 进行更改并提交
  • git checkout <oldBranch>
  • git stash pop 取消隐藏

【讨论】:

  • 嗯,所以唯一正确的方法是在尝试切换之前提交?谢谢
  • 刚刚添加了有关在多个分支上工作的其他方式的信息
【解决方案2】:

您可能需要考虑查看“git reflog”以找出分支的状态,以便恢复您的更改。

但正如您所指出的,git reset --hard 是一个更改工作树的操作,如手册页中所述:

       --hard
           Resets the index and working tree. Any changes to tracked files
           in the working tree since <commit> are discarded.

我在这里的每周 Git 提示系列中写了更多关于 reflog 的内容:

http://alblue.bandlem.com/2011/05/git-tip-of-week-reflogs.html

【讨论】:

  • 感谢编辑,伙计们。我责怪 Lion 在我不注意时自动更改拼写...
猜你喜欢
  • 2022-12-18
  • 2015-02-09
  • 2016-02-25
  • 2021-03-31
  • 2015-10-25
  • 2015-04-26
  • 1970-01-01
  • 2021-04-03
  • 2013-07-16
相关资源
最近更新 更多