error: Your local changes to the following files would be overwritten by checkout:

这篇具有很好参考价值的文章主要介绍了error: Your local changes to the following files would be overwritten by checkout:。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

git stash命令

无意间从同事那里听到stash这个命令。于是想到之前遇到的切换分支时遇到的文件状态的问题,所以花了点时间整理了以下笔记,来加深对此命令的认识。

有时,当你在项目的一部分上已经工作一段时间后,所有东西都进入了混乱的状态, 而这时你想要切换到另一个分支做一点别的事情。 问题是,你不想仅仅因为过会儿回到这一点而为做了一半的工作创建一次提交。 针对这个问题的答案是 git stash 命令。

贮藏(stash)会处理工作目录的脏的状态——即跟踪文件的修改与暂存的改动——然后将未完成的修改保存到一个栈上, 而你可以在任何时候重新应用这些改动(甚至在不同的分支上)。From Git Book。

以前未接触到stash时的做法是使用git add和git commit 来暂存,这样做的弊端是会出现很多多余的commit记录。

创建分支

使用git branch dev来创建dev分支。

如果使用git checkout -b develop表示创建分支并切换到develop分支。
error: Your local changes to the following files would be overwritten by checkout:

问题复现

在master分支已经做了一些提交,这个时候想要切换到dev分支。

如果修改的文件未提交时,当切换分支的时候会提示以下错误信息

error: Your local changes to the following files would be overwritten by checkout:
	README.md
Please commit your changes or stash them before you switch branches.
Aborting	
英文大意:当切换分支的时候,你当前修改的文件将会被覆盖,所以git需要你先提交你的变动或者在你切换分支之前暂存它们。

根据提示有两种解决方案

  1. 提交当前的变动(此方案会多出来一条提交记录)

    git add .
    git commit -m "切换分支之前暂存变动"
    
  2. 使用stash命令,此操作会将你当前工作区已修改未提交的内容暂存起来。并且以上一次提交的commit 信息作为记录。

    git stash
    

    error: Your local changes to the following files would be overwritten by checkout:

返回master分支

stash list

列出所有的暂存记录。

git stash list

如果在dev上已经解决了问题,这个时候想要回到master,并且想要恢复切换之前的文件状态。可以使用以下两种方式:

stash pop

pop命令会将暂存的文件从存储的栈中取出来,并从栈中删除暂存的记录。

git stash pop

stash apply

apply会从栈中取出暂存的文件状态,但不会删除暂存的记录。

如果不指定暂存,apply会默认从最近的暂存记录。

git stash apply

apply指定取出栈中哪一条记录

git stash apply stash@{1}

stash drop

删除指定的一条暂存记录。

git stash drop  stash@{1}

error: Your local changes to the following files would be overwritten by checkout:

疑问

使用git branch dev创建分支之后,如果继续在master分支修改README.MD文件。然后使用git checkout dev分支,此时的结果是:

error: Your local changes to the following files would be overwritten by checkout:

这个时候只是提示README.md被修改了,如果此时在dev分支上继续修改README.md文件,并使用git commit 提交修改。然后再切换到master分支,会发现master当前的工作区并不是恢复到切换dev分支之前的状态(修改了README.md的状态),而是恢复到了master分支最近一次提交的状态。

捋一捋:

  1. 创建dev分支,并且继续在master分支修改文件,然后切换到dev分支,此时文件的状态是已修改状态,当前HEAD指针指向dev分支
    error: Your local changes to the following files would be overwritten by checkout:

  2. 在dev分支上提交已修改的文件,此时的HEAD指针

    error: Your local changes to the following files would be overwritten by checkout:

  3. 然后继续修改文件,此时如果再没有暂存的情况下想要切换到master分支就会出现以下异常:

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

    error: Your local changes to the following files would be overwritten by checkout:

所以总结下来,如果分支和主分支不在同一个commit时。来回切换分支时才会提示stash。如果在同一个commit时修改文件,切换分支后,已修改的文件会继续存留在分支。

不闻不若闻之,闻之不若见之,见之不若知之,知之不若行之。

没有解决不了的问题,只是我们暂时还没有找到好的解决问题的方法。文章来源地址https://www.toymoban.com/news/detail-400986.html

到了这里,关于error: Your local changes to the following files would be overwritten by checkout:的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包