【问题标题】:git: My uncommitted changes are carried and merged when I switch branches [duplicate]git:当我切换分支时,我未提交的更改被携带和合并[重复]
【发布时间】:2018-01-23 09:51:35
【问题描述】:

我在我的主分支中做了一些更改,但没有提交它们,我签出了开发分支。我原以为会抛出一个错误,但我在 master 分支中的更改并没有与 development 分支合并。

$ git checkout development
Switched to branch 'development'
M       pom.xml
Your branch is up-to-date with 'origin/development'.

我期待的是以下错误,因此我可以在签出之前存储或提交我的更改:

error: You have local changes ....; cannot switch branches.

有人知道它为什么会发生,或者我该如何防止它再次发生?

【问题讨论】:

  • 更准确地说,我最初的结帐命令是一个错误,我不应该这样做。这就是为什么我期望抛出一个错误。这是 git 的默认行为吗?
  • 是的,AFAIK 这是 git 的默认行为。
  • 工作树中的更改不属于任何分支,除非您提交它们。当您签出另一个分支时,如果它们与新分支中受影响文件的内容不冲突,Git 会保留它们。
  • @axiac 是的,这是有道理的。
  • 另见stackoverflow.com/q/22053757/1256452(不确定这个问题是否与那个问题重复)

标签: git git-bash


【解决方案1】:

据我所知,这现在是 Git 的默认行为。切换分支时,随身携带工作目录。我似乎还记得以前的版本不是这种情况。

您可能无法避免这种情况发生,但您始终可以在切换分支之前确保您的工作目录(和阶段)是干净的。或者,您可以对您的工作或 stash 进行提交。

【讨论】:

  • ...它是默认行为的原因是git 假设您不想因为切换分支而失去工作。例如,你开始在master 上编辑一个文件,后来意识到你应该先打开一个特性分支。
  • ...这很容易回滚 - 只需 checkout <branch_you_were_on> 就可以回到原来的位置。
  • @larsks 这就是我期待错误的原因。通过这种方式,你不会丢失你的工作,但你也不能切换你的分支,除非你通过提交或存储采取一些行动。这就是我记得蒂姆的方式。 axiac 的评论也很有意义,因为工作树不属于任何地方,所以应该不是问题。我可以随时返回我的主分支并提交它们。
  • @larsks 现在我明白你的意思了。我认为这种默认行为对于一开始忘记创建分支的人来说更好。所以很清楚。感谢大家的想法和cmets。
猜你喜欢
  • 2023-01-25
  • 2016-12-18
  • 2022-08-18
  • 2017-11-04
  • 1970-01-01
  • 1970-01-01
  • 2020-12-27
  • 2014-02-20
  • 2016-02-05
相关资源
最近更新 更多