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

2024-04-10

所以,我有点困惑。

我不太擅长 git,但我记得如果您所在的分支有未提交的更改,并且您尝试签出另一个分支,git 要么不让您这样做,要么会放弃您的更改。

我还在 Chacon 和 Straub 所著的 Apress 的“Pro Git”书中检查了这种行为的真实性。

And also

我承认我的英语不是很好,但我记得从以前我更经常使用 git 的时候这种解释是正确的。或者我在更改分支时 git 丢弃未提交的更改是错误的吗?我对书上说的内容理解错误吗?

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

检查我是否在主分支中,并且使用以下命令检查更改是否干净git status.

创建一个新分支并移至该分支。

进行一些随机更改,例如使用删除几行ed.

更改回主分支。

惊喜,一个git diff or a git status显示该文件在 main 上也发生了更改。

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

git version 2.30.1 (Apple Git-130)


Edit: 一些答案说的是git switch不同于git checkout。我仍然不确定情况是否如此,因为不同的人(和文档)有不同的说法。

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

你可以看到git checkout执行相同的操作如下:


当您切换分支时,未提交的更改将保持不变。否则,像切换分支这样无害的操作会默默地删除您所做的任何本地工作。这不好(用户会抱怨;这是理所当然的)。

请记住:工作树中的局部更改是not链接到任何分支。它们只生活在你的工作树中。

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

第二句话明确提到“未提交的更改会发生冲突”。在这种情况下,Git 将拒绝切换分支。您可以提交更改、删除它们或隐藏它们——之后,您可以切换到另一个分支。

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更改分支不会丢弃本地更改 的相关文章

  • Git - 推送到远程存储库中的远程跟踪分支

    当简单地做git push到远程存储库 其master分支得到更新 对于非裸存储库来说 这是不希望出现的情况 最近的 Git 版本显示的警告消息清楚地表明了这一点 我希望能够推送到远程存储库 并拥有其之一远程追踪分支进行更新 稍后 当我登录
  • Gerrit 安装后无法克隆所有项目存储库

    我有一个新设置的 Gerrit 实例 目前只有两个存储库 所有项目 binutils 测试 尝试克隆所有项目时 我收到以下错误 git clone ssh user hostname 29418 All Projects Initializ
  • Git:如何使外部存储库和嵌入式存储库作为通用/独立存储库工作?

    我有一个大项目 比方说A repo 其中有一个子文件夹来自B repo 当我提交时 我会遇到如下警告A repo warning adding embedded git repository extractor annotator serv
  • 节点项目的 Azure git 部署失败

    我正在尝试将我的项目部署到azure 它正在失败 这些是我采取的步骤 git init git config core longpaths true git add git commit m initial commit 所有这些都有效 我
  • 交互式变基后,本地 Git 分支已偏离原始分支

    我有一个本地分行 CRM ayrshireminis 其中有一些我已推送到原点的提交 origin CRM ayrshireminis 这个分支是从创建的develop大约一周前的一个分支 其他合作者已经在该分支上完成了一周的工作 我想做的
  • 有没有办法缓存 https 凭据以推送提交?

    我最近转而将我的存储库同步到 GitHub 上的 https 由于防火墙问题 并且每次都要求输入密码 有没有办法缓存凭据 而不是每次都进行身份验证git push 自 Git 1 7 9 2012 年发布 以来 Git 中有一个巧妙的机制可
  • 使用 TFS 个人访问令牌克隆 Git 存储库

    我正在尝试以编程方式克隆 git 存储库 我的 ASP NET MVC 应用程序正在创建并启动一个进程 处理进程的代码工作正常 但是当尝试使用本地 TFS PAT 克隆 git 存储库时 身份验证失败 我无法使用 NTLM 或要求用户输入凭
  • Git 无效的修订范围 Symfony2 Composer 外部包

    RuntimeException Failed to execute git log 18efcf67d236d5bbf46ac67820250dffd0474b6e 94e2146f525fa1367e15646fa273e5b34f92
  • Git 不断提示我输入密码

    我已经使用 Git 一段时间了 但是不断要求输入密码开始让我感到厌烦 我使用的是 Mac OS X 和 GitHub 并且按照 GitHub 的说明设置了 Git 和我的 SSH 密钥设置 Git 页面 http help github c
  • 运行“git apply”时出错

    当我尝试时 您能否告诉我如何解决 补丁不适用 错误 git 应用补丁 git apply 0001 my patch error patch failed test xml 114 error text xml patch does not
  • 无法使用 git 配置文件进行 ssh

    我知道它被问了很多次 但我无法得到我的问题的答案 我正在尝试使用配置文件 ssh 到系统 配置文件是 Host qa HostName 10 218 70 345 User user IdentityFile C Users bean ss
  • refname 不明确且拉取失败

    我运行了以下命令 因为我想将生产分支移回而不必先签出 git branch f production HEAD 1 现在 当我检查生产时 我收到以下警告 warning refname production is ambiguous 然后我
  • git diff 在尖括号中显示 unicode 符号

    我有一个带有 unicode 符号 俄语文本 的文件 当我修复一些拼写错误时 我使用git diff color words 看看我所做的改变 如果是 unicode 西里尔文 符号 尖括号会造成一些混乱 如下所示 cat p1 cat p
  • 远程测试时如何搭建git开发环境

    这似乎是一个愚蠢的问题 但我觉得我对 GIT 相当了解 但我似乎无法按照我的意愿设置我的开发环境 我要么错过了一些非常简单的东西 要么我做错了 我在我的服务器上初始化了一个裸 git 存储库 将其克隆到我的本地计算机 提交我的文件并推送到原
  • 默认情况下 git merge -Xignore-space-change

    我该如何设置该选项ignore space change对于所有合并使用git config 我也许可以使用别名merge 但因为我希望该设置应用于git stash pop git stash apply git pull and git
  • VS 2015 + Bower:在防火墙后面不起作用

    Problem 在 Visual Studio 2015 中 使用 Bower 我的包在防火墙后面时恢复失败 并出现类似以下内容的错误 ECMDERR 无法执行 git ls remote tags heads git github com
  • 如何将工作树与提交进行比较?

    我在用着 git diff mycommit 用于比较我的工作树mycommit 但它似乎忽略当前索引中不存在的文件 您可以按如下方式重现它 git init echo A gt A txt git add git commit m A g
  • git 日志历史记录图,每次提交一行,彩色,带有日期

    我需要的格式如下 git log decorate graph oneline date order 但我也需要它 包含日期 短 具有相同的颜色 I tried git log decorate graph oneline date ord
  • 如何使用 AWS Lambda 安装 Git?

    我在代码提交存储库中有代码 我正在编写一个 lambda 函数来为代码提交存储库的每个签入 事件 构建代码 我无法安装 git 因此无法克隆存储库 我该怎么办呢 正如其他人提到的 在 lambda 上安装 git 要么非常困难 要么完全不可
  • Git 将一个分支合并到所有其他分支中

    我知道这个问题已经在这里被问过 https stackoverflow com questions 2329716 merging changes from master into all branches using git https

随机推荐