【问题标题】:Git branching & local changesGit 分支和本地更改
【发布时间】:2017-05-28 07:54:29
【问题描述】:

如果不提交更改或存储更改,我们无法在 Git 中切换分支。这背后的大局是什么?为什么 Linus 在设计 Git 时采用这种方法?

如果切换分支导致跨分支出现本地更改,那么分支的意义何在,因为它们应该独立工作?

【问题讨论】:

  • 可以在不先提交的情况下切换分支:参见stackoverflow.com/q/22053757/1256452。但是:为什么您首先声称分支机构“应该孤立地工作”?另见stackoverflow.com/q/25068543/1256452
  • 我同意@torek。我想了解您所说的“孤立工作”是什么意思。
  • 曾经使用过 Python 虚拟环境吗?在您有意合并它们之前,可以认为分支是相同的。
  • @itsneo:分支只是对更改历史的跟踪,其中可以并排有许多单独的历史。它不是一个完整的环境。您应该阅读更多有关 Git 基本模型的信息,也许它会更有意义。
  • @siride 我听到你的声音并理解它是什么,但问题更多地在于为什么。

标签: git design-decisions


【解决方案1】:

如果不提交更改或存储它们,我们就无法在 Git 中切换分支。

实际上你可以强制切换分支,但是你会丢失当前分支上所有未提交的更改。如果您想丢失当前的工作只是为了切换分支,这应该是非常不寻常的。为什么不先将其提交到当前分支,或者至少 stash 更改,以便您可以回来?

无论如何要强制切换分支,你可以:

1)

git checkout -f <new_branch>  // will lose any uncommitted changes on <old_branch>

或者,

2)

git reset --hard <commit-hash-id-of-new-branch>  // will lose any uncommitted changes on <old_branch>

【讨论】:

  • 问题不是要学习如何切换,而是要了解这样一个现实之间的设计:(
  • 如果您切换分支,您不会丢失未提交的更改。它们留在那里,Git 尝试将它们应用到新分支,这可能会导致冲突。
  • @siride 即使没有stash ?
  • @siride:通常如果有冲突,Git 会简单地拒绝git checkout。您可以使用@artm 建议覆盖的-f,或使用-m 请求Git 尝试合并文件。
  • @itsneo 不确定您要问的是什么设计。在更改分支之前保存/提交工作的任何版本控制都很常见
猜你喜欢
  • 1970-01-01
  • 2014-03-31
  • 2017-10-09
  • 2016-01-05
  • 2020-08-20
  • 1970-01-01
  • 2012-03-05
  • 2016-04-12
相关资源
最近更新 更多