【问题标题】:Git checkout to master from another branch updates automatically local changes?Git checkout to master 从另一个分支自动更新本地更改?
【发布时间】:2021-12-07 00:04:26
【问题描述】:

我有一个空的 git repo,首先我创建了一个内容为“pulkitsharma”的 hello.txt 文件。 在此之后,我将其添加到 staging 中,然后在 master 分支中提交了更改。然后我创建 另一个名为“new_branch”的分支并更新了 hello.txt 的内容 “pulkitsharma\npulkitsharma6569@gmail.com”并没有上演提交。现在,当我 结帐到 master 分支 hello.txt 的内容会自动更新。谁能告诉 我们为什么会发生这种情况,因为我认为在结帐到主分支时应该有
一个错误。为什么 git checkout master 的输出是 "M hello.txt Switched to branch 'master' "

git init
vi hello.txt
git add .
git commit -m "hello.txt added to master branch"
git checkout -b new_branch
vi  hello.txt
git checkout master

【问题讨论】:

  • 为避免这种情况并在第一个分支上保留更改(以便结帐后第二个分支处于干净状态),请在切换分支之前提交更改。如果您稍后想继续在第一个分支上工作并且提交是未完成的工作,只需使用 git reset HEAD^ 撤消它
  • 在你做任何永久性的事情之前总是运行git status。 (从技术上讲,提交只是-永久的,所以即使你搞砸了也没关系。只是修复错误比避免需要更多的工作i> 首先是错误)。许多人发现将环境设置为不断显示(部分)git status 输出很有帮助。
  • 要在 Unix 风格的 shell 中获得这种恒定状态显示,请寻找可以为该特定 shell 做到这一点的东西。例如,Bash 和 zsh 具有执行此操作的“样式”选项。

标签: git git-merge git-branch git-commit git-checkout


【解决方案1】:

git checkout 很清楚:

要准备处理<branch>,请通过更新工作树中的索引和文件并将 HEAD 指向分支来切换到它。

保留对工作树中文件的本地修改,以便将它们提交到<branch>

因此,即使您切换回master,您对 hello.txt 的本地修改(未暂存)仍然存在。

OP 在 cmets 中添加:

现在我不小心结帐到master 分支。
然后不是显示错误并询问提交或存储为什么它会更新master 分支中的文件(在主分支中没有任何额外的提交)

如“How to stop git auto-update when switching branches?”中所述,您需要:

  • 任一提交 (git commit -a -m "…")之前 执行git checkout master
  • git stash 如果您不想进行“临时”提交。
    稍后,执行git checkout new_branch && git stash pop 以检索您未提交的代码。

【讨论】:

  • git-scm.com/docs/git-switch 会有相同的行为。
  • 为什么本地修改会自动提交,而不是显示hello.txt文件应该暂存?
  • @PulkitSharma 为什么不呢?这是有道理的,它有效。似乎是什么问题?
  • @RomainValeri 问题是当我在分支 new_branch 中本地修改(未分级)hello.txt 然后签出到 master 分支时,为什么 hello.txt 会自动更新而在 master 分支中没有任何提交。
  • 因为git是这样设计的。它会导致什么问题?如果您希望这些更改保留在第一个分支上,请提交它们。什么不清楚?
猜你喜欢
  • 2019-03-17
  • 2022-06-13
  • 2011-04-22
  • 2019-05-10
  • 2020-06-03
  • 2018-04-15
  • 2022-11-15
  • 1970-01-01
  • 2011-03-08
相关资源
最近更新 更多