Git:修改工作树和索引的 git checkout

标签 git

我希望 git checkout <commit>将工作树和索引刷新到 <commit>版本。但是,在某些情况下,它会保留工作树和索引中的当前更改。例如:

git branch br1
git branch br2
git checkout br1
<make change M1 to file foo>
git add foo
<make change M2 to file foo>
git checkout br2

现在在分支 br1 中进行的所有工作树/索引更改保存在分支br2 , 作为 git statusbr2不会给出干净的信息。我猜这是因为 br1 的负责人和 br2原来有相同版本的文件foo , Git 可以自动检测到这一点。

问题:

  • Git 何时决定不刷新工作树和索引?还有其他极端情况吗?

最佳答案

git checkout命令实际上有两种不同的(常见的)操作模式。

  1. 如果你运行 git checkout <branch> , 然后你会切换到分支 <branch> .对工作树的所有更改都将保留——这通过将未提交的更改 merge 到目标分支来实现,因此它可能会失败。索引中的更改将被 stash 。

  2. 如果你运行 git checkout <path> , 然后 git 将清除对 <path> 的更改通过从当前提交中获取索引和工作副本。

所以 git checkout <branch> 的目的以防万一您决定所做的更改实际上属于不同的分支。

关于Git:修改工作树和索引的 git checkout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13166505/

相关文章:

java - 如何使用键盘快捷键从 IntelliJ IDEA 执行 git 提交和推送?

java - 当我尝试从 git 更新项目时出现此错误 : Couldn't save uncommitted changes

git - 带有gradle-git的RefNotFoundException

git - 将所有根目录移动到子文件夹中

eclipse - 如何使用 EGit 在 Eclipse 中配置 GIT HTTPS 客户端证书身份验证?

Git branch checkout 说虽然我的工作目录是干净的,但文件将被覆盖

git - 如何全局禁用git hooks

java - 在 IntelliJ 中运行 Eclipse 项目时遇到问题

git:仅列出新文件

r - CloudFormation 模板无法安装 R 相关包