一个分支已经写好了功能,提交到了远程仓库,手贱又在编译器上编译了一下,想切换分支都不行,提示有未保存的修改

$ git checkout master

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

STM32F4xx_Template/STM32F4xx_Template.dep

STM32F4xx_Template/settings/STM32F4xx_Template.wsdt

Please commit your changes or stash them before you switch branches.

Aborting

Git提示,git checkout – – file 可以丢弃工作区的修改:

<pre>$ git status

On branch feature-time_capture

Your branch is up to date with 'origin/feature-time_capture'.

Changes not staged for commit:

  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

modified: STM32F4xx_Template/STM32F4xx_Template.dep

modified: STM32F4xx_Template/settings/STM32F4xx_Template.wsdt

no changes added to commit (use "git add" and/or "git commit -a")
&lt;/pre&gt;

所以使用

$ git checkout -- STM32F4xx_Template/STM32F4xx_Template.dep 

撤销 STM32F4xx_Template.dep 文件的修改

 

命令

git checkout -- STM32F4xx_Template.dep

意思就是,把STM32F4xx_Template.dep文件在工作区的修改全部撤销,这里有两种情况:

一种是STM32F4xx_Template.dep自修改后还没有被放到暂存区,撤销修改就回到和版本库一模一样的状态;

一种是STM32F4xx_Template.dep已经添加到暂存区后,又作了修改撤销修改就回到添加到暂存区后的状态

总之,

git checkout-- file 

就是让这个文件回到最近一次git commitgit add时的状态。

 

git checkout-- file 

 命令中的– –很重要,没有– –,就变成了”切换到另一个分支”的命令

 

如果已经把文件git add到暂存区了,Git提示,用命令git reset HEAD <file>可以把暂存区的修改撤销掉(unstage),重新放回工作区。

放回到工作区就可以使用

git checkout-- file 

 

总结

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令

git checkout-- file 

 

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>就回到了场景1,第二步按场景1操作。

 

1 评论

发表评论

你的电子邮件地址不会被公开 * 为必填字段

提交评论