git分支切换的工作区与暂存区问题

合并或切换分支工作后,要么是在当前分支提交后,要么使用git stash将当前暂存区保存后再进行合并或切换分支操作,在此之前一定要使用git status确认为干净的仓库后再切换或合并。

切换分支时,工作目录中的文件会发生改变。

一、出现已修改的标志但是没报错,仍然可以切换分支

git checkout B
M       text
Switched to branch 'B'

这种问题一般就是原本就存在master分支,紧接着使用了git switch -c Dev生成了一个Dev分支,这两个分支的版本是完全一致的(在Dev分支没有commit的前提下),导致md5相同,git认为两个版本一致,所以在切换分支时会提示文件已经改动(对于新增的文件也会提示文件已经新增),但仍然保存了更改到另一分支。

二、切换分支时报错ERROR

git checkout Dev 
error: Your local changes to the following files would be overwritten by checkout:
      readme.txt
Please commit your changes or stash them before you switch branches.
Aborting

此时,本分支的md5与Dev分支的md5一定是不相同的,也就是两个不一样的版本,此时无法强制切换,会报错。可以使用git stash 或者git commit 来解决

小结1

1、如果文件没有被git管理(追踪)

不会报错,但一般git status会显示文件未被追踪(工作区不干净)

当未追踪的文件内容发生修改或新增未追踪的文件时,在此分支上新增的或修改的未被追踪的文件会被同步到其他分支上,因为git switch执行时会将工作区中的文件改变到最近一次提交版本,未追踪的文件由于不受git管理,会保留在工作区中。

我们从上面可以看到,在testing分支上创建的,新增未被追踪的b.txt文件,被同步到了master分支上。

因为git checkout命令执行时,会将工作目录里的文件改变到指定的提交状态。

又因为你在testing分支上创建的b.txt文件,既没有被提交也没有被暂存,说明b.txt文件还未被Git管理。在这种情况下,你进行切换分支操作,你将丢失在testing分支对b.txt文件编写。Git认为这样是非常不安全的操作,会默认的把该状态的文件,一起带入所切换到的分支中。

所以git checkout命令还是很智能的,可以我们一般不会用该功能,这个功能用来会非常的混乱,可能会污染到其他分支,尽管Git是好意。


作者:繁华似锦Fighting
链接:https://www.jianshu.com/p/b9d0b1e76449
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2、文件被git管理(git add )暂存区中存在文件,但是未提交到本地版本库

不会报错,但git status会显示文件需要被提交(工作区不干净)

暂存区中存储的文件,由于未被提交,也会随着分支的切换,加入到其他分支当中。

3、文件被git管理(git add )暂存区中存在文件,并且提交到本地版本库,但是随后又有更改

此时会报错错误提示:b.txt文件在本地的更改,将随着切换分支的操作,被版本库所覆盖(也就是文件被还原)(工作区不干净)因为b.txt文件已经被Git管理过了,如果b.txt文件还处于修改未追踪状态,你就必须b.txt文件修改完成并提交后,再去其他分支工作。

小结2

使用git checkout命令进行分支的切换,实际上有三个地方更改了

  1. HEAD指针进行了移动,指向了新的分支上。
  2. 暂存区恢复到新分支上,最新提交版本的状态。
  3. 工作目录也恢复到新分支上,最新提交版本的状态。

作者:繁华似锦Fighting
链接:https://www.jianshu.com/p/b9d0b1e76449
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

切换分支前一定要确认工作区是否干净

1、git status会显示文件未被追踪(工作区不干净)

2、git status会显示文件需要被提交(工作区不干净)

参考一篇回答,此处更加详细

https://zhuanlan.zhihu.com/p/404245833?utm_id=0

https://zhuanlan.zhihu.com/p/133320894

https://www.cnblogs.com/thirteen-yang/p/13878118.html

重点参考icon-default.png?t=N7T8https://www.jianshu.com/p/b9d0b1e76449重点参考icon-default.png?t=N7T8https://blog.csdn.net/qq_27507377/article/details/84064121

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值