下次想改文件名或者删除文件,务必不要在 IDE 里面直接改,而要在 shell 里使用 git mv 或 git rm

2017-01-05 19:04:33 +08:00
 ericgui
这几天被一个巨傻逼的问题折磨死了。

我在 IDE 里面,把一个文件名字改为驼峰形式,感觉看起来漂亮点。
然后尼玛我就发现 push 到 github 之后,竟然有两个文件。
比如 github repo 和本地都有一个文件 abc ,版本号是相同的
然后我在本地把 abc ,改为 Abc ,
然后本地只有 Abc ,但 push 之后, github repo 里,会有 abc 和 Abc 同时存在!
而且我每次修改更新本地的 Abc , push 之后, github repo 里 abc 有更新, Abc 没更新!
你要说既然 github 上有 2 个文件,那我就 pull 一下, 看能不能把两个文件都拉下来,然后删一个不就行了?
pull 不下来!

后来只好在vps里新建一个文件夹,git init,git pull之后,用“git rm abc”删了这个老文件,然后commit,再push到github上,这时github上的abc才算删除了。

然后,如果不删除本地repo,直接git pull,会把本地Abc给删了。我感觉日了狗了,只好把本地repo删干净,重新在本地新建一个文件夹,再git init,git pull,这才搞好。

这个问题让我搞得觉得自己智商都下降了。

有谁有啥经验的,帮忙指点一下这为啥出现这么奇葩的问题么?
4480 次点击
所在节点    PHP
26 条回复
vibbow
2017-01-05 19:11:35 +08:00
目测你用的 Linux/Mac
kilnyy
2017-01-05 19:12:53 +08:00
看起来像 git add 时候 add 没 add 删除的部分吧?
ericgui
2017-01-05 19:12:59 +08:00
@vibbow Windows
ericgui
2017-01-05 19:14:06 +08:00
@kilnyy 我每次 git add 的时候,
都是直接省事,很懒,直接用“ git add .”
会不会是这个问题?
sinalvee
2017-01-05 19:14:26 +08:00
感觉你用的是 windows
如果是的话,应该跟 windows 路径大小写不敏感有关
coolair
2017-01-05 19:24:25 +08:00
开启 git 大小写敏感设置即可。
JasonSi
2017-01-05 19:43:41 +08:00
我大致看了一下,我认为是这样的:你改了名字,实际上是相当于你删除了 A 文件,又新建了 B 文件,于是你又 git add .,这导致 git 没有追踪到你 A 文件的删除事件,只认为你新建了 B ,然后 commit push 了,然而此时的远端是认为你有 AB 文件,而本地是只有 B 文件的,所以历史冲突,不能直接 pull 。
解决办法就是 git rm A 或者 git mv A ,其实更方便的方法是换个 IDE 吧。。
因为我之前也遇到这种问题,后来用 Atom 的时候发现直接在 Atom 里删除,重命名他都会帮我在 git 中留下记录。
当然了 Atom 只是个编辑器不算 IDE 。。
hxsf
2017-01-05 20:02:36 +08:00
很明显 lz 用的 windows , windows 不区分大小写。所以会出现这个问题。
AlisaDestiny
2017-01-05 22:06:40 +08:00
我的 IDEA 没有出现这种情况啊。
我把 A.java 文件 rename 成 B.java 。然后 git status 显示 delete A.java 和 add B.java 。
jaysun
2017-01-05 22:09:45 +08:00
ignorecase=false
ericgui
2017-01-06 01:11:15 +08:00
@JasonSi 对,就是这么回事。用 git add . 仅仅记录了增加或修改的文件,要用 git add -A

git add -A = git add . + git add -u

http://stackoverflow.com/questions/572549/difference-between-git-add-a-and-git-add
这帖子写的很清楚

还是我对 git 不熟啊
不过,这好好折腾一番,也算熟了,哈哈
ericgui
2017-01-06 01:12:15 +08:00
@AlisaDestiny 我用 Hbuiler ,这破 IDE 唯一的好处是写 javascript , html 和 css 的时候比较省事,其他目前没看到什么优势
ericgui
2017-01-06 01:14:39 +08:00
@JasonSi 我用 Hbuiler ,这破 IDE 唯一的好处是写 javascript , html 和 css 的时候比较省事,其他目前没看到什么优势
msg7086
2017-01-06 03:00:24 +08:00
我的经验是,如果一个人用不好 Git 的基本功能,我会塞给他一个好用的 GUI 。
canfoderiskii
2017-01-06 07:44:32 +08:00
直接用 GUI 压根不会遇到这种问题
miaotaizi
2017-01-06 09:20:56 +08:00
@ericgui 我大 phpstom 面前其他的 php IDE 都是渣渣
chuanqirenwu
2017-01-06 10:20:58 +08:00
我的建议是,换个 ide ,我在 pycharm 下执行你描述的操作没有出现任何问题。
Explorare
2017-01-06 15:13:51 +08:00
@ericgui 实际上 Git v.2.x 中 `git add .`会跟踪删除记录,如下所示:

```
{ New folder } » git init /cygdrive/c/Users/Explorare/Desktop/New folder
Initialized empty Git repository in /cygdrive/c/Users/Explorare/Desktop/New folder/.git/
{ New folder } HEAD » echo Change me > change-me
{ New folder } HEAD » echo Delete me > delete-me
{ New folder } HEAD » git add change-me delete-me
{ New folder } HEAD » git status /cygdrive/c/Users/Explorare/Desktop/New folder
On branch master

Initial commit

Changes to be committed:
(use "git rm --cached <file>..." to unstage)

new file: change-me
new file: delete-me

{ New folder } HEAD » git commit -m initial
[master (root-commit) 4b1ff0d] initial
2 files changed, 2 insertions(+)
create mode 100644 change-me
create mode 100644 delete-me
{ New folder } master » echo OK >> change-me
{ New folder } master » rm delete-me /cygdrive/c/Users/Explorare/Desktop/New folder
{ New folder } master » echo Add me > add-me
{ New folder } master » git status /cygdrive/c/Users/Explorare/Desktop/New folder
On branch master
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)

modified: change-me
deleted: delete-me

Untracked files:
(use "git add <file>..." to include in what will be committed)

add-me

no changes added to commit (use "git add" and/or "git commit -a")
{ New folder } master » git add . /cygdrive/c/Users/Explorare/Desktop/New folder
{ New folder } master » git status /cygdrive/c/Users/Explorare/Desktop/New folder
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)

new file: add-me
modified: change-me
deleted: delete-me

{ New folder } master » git --version /cygdrive/c/Users/Explorare/Desktop/New folder
git version 2.8.3
```
ericgui
2017-01-07 12:34:32 +08:00
@Explorare 我用 1.9.2 。。。。。。。明白了,下次我直接升级 git 2.X 版本吧,谢谢
ericgui
2017-01-07 12:35:55 +08:00
@msg7086
@canfoderiskii GUI 还是拉倒吧,我发现我对命令行更敏感。别提了。我曾经下载过 GUI 版本的,根本看不懂。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/332492

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX