gpt4 book ai didi

git - 更改分支不会丢弃本地更改

转载 作者:行者123 更新时间:2023-12-04 03:22:12 25 4
gpt4 key购买 nike

所以,我有点困惑。

我不太擅长 git,但我记得如果你在一个有未提交更改的分支中并且你试图 checkout 另一个分支,git 要么不允许你,要么会放弃你的更改。

我还在 Chacon 和 Straub 合着的 Apress 的“Pro Git”一书中验证了这种行为是正确的。

enter image description here

还有

enter image description here

我承认我的英语不是很好,但我记得这种解释在我过去经常使用 git 的时候是正确的。或者我在更改分支时关于 git 丢弃未提交的更改是错误的吗?我理解这本书说错了什么吗?

如果我是对的,为什么我的存储库将更改的文件从一个分支移动到另一个分支?您可以在此处检查行为:

enter image description here

Check that I'm in main branch and that it's clean from changes using git status.

Create a new branch and move to it.

Do some random alterations like deleting a couple of lines using ed.

Change back to main branch.

Surprise, a git diff or a git status shows that the file is changed on main as well.

git 不应该阻止我更改分支或放弃我的更改吗?这非常令人困惑,我花了一段时间才意识到,如果我不对它做任何更改,为什么我的主分支会出现意外行为。

git 版本 2.30.1 (Apple Git-130)


编辑:一些回答说 git switchgit checkout 不同。我仍然不确定情况是否如此,因为不同的人(和文档)说的不同。

但是,我也尝试过使用 git checkout 进行同样的操作,它还会移动文件,而不是阻止我切换或警告我工作目录中的差异。

你可以看到 git checkout 做同样的事情如下:

enter image description here

最佳答案

当您切换分支时,未提交的更改将保持不变。否则,像切换分支这样无伤大雅的行为会悄无声息地删除您所做的任何本地工作。这不好(用户会提示;这是理所当然的)。

记住:工作树中的本地更改链接到任何分支。它们只存在于您的工作树中。

您的第一个引用/屏幕截图仅讨论提交的更改:当您切换分支时,您的工作目录将反射(reflect)切换到分支的内容。它还提到“如果 Git 不能干净地”(强调我的)——这意味着 Git 只会在本地(未提交)和其他分支中更改相同文件时中止。

第二个引用明确提到“未提交的冲突更改”。在那种情况下,Git 将拒绝切换分支。您可以提交更改、删除它们或存储它们——之后,您可以切换到另一个分支。

只有当(提交的)文件在分支之间不同时才会发生冲突。切换分支时,“冲突检测”不考虑本地未提交的更改。

git checkout 的这种行为一直都是一样的。 git switch(一种较新的 checkout 替代方案)以相同的方式运行。

关于git - 更改分支不会丢弃本地更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68320608/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com