在windows+eclipse+git遇到的未修改文件被标记为已修改的问题
最近遇到2个具体的问题:
1、我们有个工程里面有几个外部jar包,这几个jar包经常会更新,更新的时候如果是在eclipse中执行的,由于windows文件机制,所以会报错无法覆盖这几个jar包。虽然git pull失败了,但是却出现了一个很严重的问题,就是许多未修改的文件被标记为已修改,另一个同事改的许多文件都变成了空文件。这个问题出现过2次,最后都是以手工reset + 手工合并的方式解决的问题。
2、今天我新增了一部分源码,同时在pom文件中引入了一个我自己的jar包,在commit后进行git pull+merge的过程中出现了一个conflict,手工解决完conflict发现了和1类似的错误:即许多未修改文件被标记为已修改。
排查过程:
首先,我提交了pom文件:
git commit pom.xml -m "merge pom"
git merge
发现依旧报错:
fatal: You have not concluded your merge (MERGE_HEAD exists).
Please, commit your changes before you merge.
然后我查询了git状态:
git status
发现了问题:
On branch master
Your branch and 'origin/master' have diverged,
and have and different commits each, respectively.
(use "git pull" to merge the remote branch into yours) All conflicts fixed but you are still merging.
(use "git commit" to conclude merge) Changes to be committed:
底下一大堆我没修改过的文件
然后我stash了一遍更改,重新执行了一次上述操作,发现此刻问题可以复现,那么就好多了,至少能找到稳定触发的原因和解决方案。
再stash一遍(解决时reset更好,我这里为了保存问题),在未进行git pull时去eclipse中的team -> synchronize workspace查看哪些文件和远程端不同,发现就是出问题的那些文件。
事实:
1、git merge时出现了问题,不论是jar包无法覆盖或者conflict。
2、出问题之后文件错误都是提交在本地上次pull之后的文件。
3、一些新文件本地在pull之后会创建出来,只不过里面是空文件,而源会有数据内容。
4、远端是一个bare仓库。创建时是git init --bare 而不是git init。
我个人的推论(猜的,需要验证):
1、windows+git在使用过程中执行merge是有先后顺序的,即先对即将merge进来的文件做一次修改,最后统一关闭所有修改过后的文件。
2、如果在中途出现了错误,那么此时关闭文件这项操作应该没有执行成功,也就是说merge没有保存。
3、但是由于最后修改时间的变化,或者是新文件创建,所以git认定这些文件是新版本,所以被标记为了待commit。
4、如果这时你commit了并且push了,那就会把别人写的代码变为空。。。
5、但是之前用git init创建的仓库似乎没有这个问题?
虽然猜测是这么个原因,但是不太确定如何验证,毕竟试了许多关键字在stackoverflow和搜索引擎上都没搜到对应的信息。我今天又不想去发mail,又不想看源码,所以先找个解决方案,以后再考虑彻底解决。
解决方案:
把冲突文件回滚到之前不冲突的状态,然后先pull,再修改完push上去。
1、查看历史版本
git log pom.xml
2、回退
git reset xxxxxxxxxxxxxxxx
3、提交一下,毕竟reset了
git commit -m "reset pom"
4、本地diff有更新,版本虽然回退了,但是文件还是修改后的,先checkout回reset之后的版本。
git checkout pom.xml
5、看一看是不是没修改了
git diff
6、拉
git pull
7、然后找到之前存起来的pom.xml,把自己做的修改再加上。然后commit+push
git commit -m "add package guinai in pom.xml"
git push
顺利完成。
在windows+eclipse+git遇到的未修改文件被标记为已修改的问题的更多相关文章
- Windows下Git Bash中VIM打开文件中文乱码
Windows下Git Bash中VIM打开文件中文乱码,解决方法是: 步骤一 admin@DESKTOP-O99620V MINGW64 /d/项目GGE/Hard_for_GGE (master) ...
- 如何修改文件的 “创建时间” 和 “修改时间”(Windows Linux macOS)
请访问原文链接:https://sysin.org/blog/how-to-change-file-date,查看最新版.原创作品,转载请保留出处. 作者:gc(at)sysin.org,主页:www ...
- python 修改文件的创建时间、修改时间、访问时间
目录 python 修改文件创建.修改.访问时间 方案一 方案二(无法修改文件创建时间) python 修改文件创建.修改.访问时间 突如其来想知道一下 python 如何修改文件的属性(创建.修改. ...
- Windows学习总结(4)——Host文件的作用和如何修改Host文件
本经验将为您介绍,什么是Host文件,Host文件作用,Host文件的位置等信息,以帮忙您了解Host文件. 方法/步骤 什么是HOST文件: Hosts是一个没有扩展名的系统文件,其基本作用就是将一 ...
- Git本地有未提交文件,直接拉取远端最新版本
git pull = git fetch + git merge 1.修改不同的文件: 用户D和用户L在本地提交中修改了不同的文件,如果用户D将改动推送到服务器后,用户L再推送就会遇到非快进式推送错误 ...
- windows eclipse IDE打开当前类所在文件路径
1. 展开如下菜单: Run ---- External Tools ---- External Tools Configurations 2. 在 program 下面新建一个工具 program- ...
- C#/.NET 读取或修改文件的创建时间和修改时间
手工在博客中添加 Front Matter 文件头可是个相当费事儿的做法,这种事情就应该自动完成. .NET 中提供了非常方便的修改文件创建时间的方法,使用这种方法,能够帮助自动完成一部分文件头的编写 ...
- linux仅修改文件夹权限 分别批量修改文件和文件夹权限
比如我想把/var/www/html下的文件全部改成664,文件夹改成775,怎么做呢 方法一: 先把所有文件及文件夹改成664,然后把所有文件夹改成775 chmod -R 664 ./ find ...
- 使用Inno Setup函数修改文件内容
0.inno打开文件操作&字符串操作所需函数原型及解释 function LoadStringsFromFile(const FileName: String; var S: TArrayOf ...
随机推荐
- 常见问题:bootstrap datepicker日期插件汉化
引入简体中文js(bootstrap-datepicker.zh-CN.js),并在datepicker属性配置language为‘zh-CN’即可,示例如下: $(".form_datet ...
- Docker 路径更改
本文环境在Windows 10 下docker docker 默认不修改路径全部安装在c盘会非常大,等发现c盘占了20多g再想办法...... 默认情况下 1.linux 容器下Docker 容器的安 ...
- LeetCode 871 - 最低加油次数 - [贪心+优先队列]
汽车从起点出发驶向目的地,该目的地位于出发位置东面 target 英里处. 沿途有加油站,每个 station[i] 代表一个加油站,它位于出发位置东面 station[i][0] 英里处,并且有 s ...
- tshark的抓包和解析
1. a.解析dhcp抓包文件 -r 读抓好的数据包文件 tshark -r 数据包路径 -Y 过滤条件 基本上可以运用 wirshark上的过滤条件 查找中继后dhc ...
- 关于Android布局优化的代码使用
1. include标签: include标签的作用是在一个布局文件中导入另一个布局文件.在开发中经常会有多个页面同时拥有一部分相同的布局,这个时候如果每个布局都把那个部分的代码写一遍就会使得代码重 ...
- nginx域名跳转到www下
- Nginx反向代理部署NodeJS项目
在nginx配置文件种的http节点下: server { listen 8005; server_name localhost; location /{ proxy_set_header X_Rea ...
- OSPF(Open Shortest Path First)
1.概述 路由协议OSPF全称为Open Shortest Path First,也就开放的最短路径优先协议,因为OSPF是由IETF开发的,所以所有厂商都可以用. OSPF的流量使用IP协议号. O ...
- 2019王小的Java学习之路
文章背景身边有个非常要好的朋友王某某,因为是发小的关系,之后文章统称为王小. 大专毕业后 顺利 的被安排进了某某工厂工作,工作一段时间后,尽管工作比较轻松,却无法忍受终日的流水线生活,经过我的介绍,决 ...
- Django---cookie和session
Django的cookie和session 一.cookie 二.session 回到顶部 一.cookie 1.特点 1. cookie数据保存在客户端,以key-value存储 2. cookie ...