下次想改文件名或者删除文件,务必不要在 IDE 里面直接改,而要在 shell 里使用 git mv 或 git rm - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ericgui
V2EX    PHP

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

  •  
  •   ericgui 2017-01-05 19:04:33 +08:00 4878 次点击
    这是一个创建于 3233 天前的主题,其中的信息可能已经有所发展或是发生改变。
    这几天被一个巨傻逼的问题折磨死了。

    我在 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,这才搞好。

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

    有谁有啥经验的,帮忙指点一下这为啥出现这么奇葩的问题么?
    第 1 条附言    2017-01-05 22:36:09 +08:00
    谢谢各位的解释。

    今天搜到这个帖子,似乎完满解释了我的疑惑:

    http://stackoverflow.com/questions/572549/difference-between-git-add-a-and-git-add

    总之,以后用"git add -A",就可以避免这个问题了。

    当然, ignorecase=false 设置也是有必要的。
    26 条回复    2017-01-08 14:45:55 +08:00
    vibbow
        1
    vibbow  
       2017-01-05 19:11:35 +08:00
    目测你用的 Linux/Mac
    kilnyy
        2
    kilnyy  
       2017-01-05 19:12:53 +08:00
    看起来像 git add 时候 add 没 add 删除的部分吧?
    ericgui
        3
    ericgui  
    OP
       2017-01-05 19:12:59 +08:00
    @vibbow Windows
    ericgui
        4
    ericgui  
    OP
       2017-01-05 19:14:06 +08:00
    @kilnyy 我每次 git add 的时候,
    都是直接省事,很懒,直接用“ git add .”
    会不会是这个问题?
    sinalvee
        5
    sinalvee  
       2017-01-05 19:14:26 +08:00
    感觉你用的是 windows
    如果是的话,应该跟 windows 路径大小写不敏感有关
    coolair
        6
    coolair  
       2017-01-05 19:24:25 +08:00 via Android
    开启 git 大小写敏感设置即可。
    JasonSi
        7
    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
        8
    hxsf  
       2017-01-05 20:02:36 +08:00
    很明显 lz 用的 windows , windows 不区分大小写。所以会出现这个问题。
    AlisaDestiny
        9
    AlisaDestiny  
       2017-01-05 22:06:40 +08:00
    我的 IDEA 没有出现这种情况啊。
    我把 A.java 文件 rename 成 B.java 。然后 git status 显示 delete A.java 和 add B.java 。
    jaysun
        10
    jaysun  
       2017-01-05 22:09:45 +08:00 via Android
    ignorecase=false
    ericgui
        11
    ericgui  
    OP
       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
        12
    ericgui  
    OP
       2017-01-06 01:12:15 +08:00
    @AlisaDestiny 我用 Hbuiler ,这破 IDE 唯一的好处是写 Javascript , html 和 css 的时候比较省事,其他目前没看到什么优势
    ericgui
        13
    ericgui  
    OP
       2017-01-06 01:14:39 +08:00
    @JasonSi 我用 Hbuiler ,这破 IDE 唯一的好处是写 Javascript , html 和 css 的时候比较省事,其他目前没看到什么优势
    msg7086
        14
    msg7086  
       2017-01-06 03:00:24 +08:00
    我的经验是,如果一个人用不好 Git 的基本功能,我会塞给他一个好用的 GUI 。
    canfoderiskii
        15
    canfoderiskii  
       2017-01-06 07:44:32 +08:00 via Android
    直接用 GUI 压根不会遇到这种问题
    miaotaizi
        16
    miaotaizi  
       2017-01-06 09:20:56 +08:00 via iPhone
    @ericgui 我大 phpstom 面前其他的 php IDE 都是渣渣
    chuanqirenwu
        17
    chuanqirenwu  
       2017-01-06 10:20:58 +08:00 via iPhone
    我的建议是,换个 ide ,我在 pycharm 下执行你描述的操作没有出现任何问题。
    Explorare
        18
    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
        19
    ericgui  
    OP
       2017-01-07 12:34:32 +08:00
    @Explorare 我用 1.9.2 。。。。。。。明白了,下次我直接升级 git 2.X 版本吧,谢谢
    ericgui
        20
    ericgui  
    OP
       2017-01-07 12:35:55 +08:00
    @msg7086
    @canfoderiskii GUI 还是拉倒吧,我发现我对命令行更敏感。别提了。我曾经下载过 GUI 版本的,根本看不懂。
    msg7086
        21
    msg7086  
       2017-01-07 15:48:18 +08:00
    @ericgui 我是说「好用的 GUI 」,不是「看不懂的 GUI 」。
    ericgui
        22
    ericgui  
    OP
       2017-01-07 16:13:59 +08:00
    @msg7086 哦。能推荐一个么?我上次真的没看懂。也忘了上次下的 GUI git 是啥名字了。谢谢
    msg7086
        23
    msg7086  
       2017-01-07 17:06:09 +08:00
    @ericgui 可以试一下 SmartGit 。
    不一定适合所有人,不过我们团队里大家用了感觉都不错, Git 操作比命令行时候精细了许多。
    拿来做复杂的分支 Merge/Rebase 功能也非常舒服,不再像命令行下那样 Rebase 一时爽,○○×××了。
    canfoderiskii
        24
    canfoderiskii  
       2017-01-07 22:37:48 +08:00 via Android
    @ericgui windows 下 tortoisegit 挺好用。 smartgit 也不错,还跨平台
    thecon
        25
    thecon  
       2017-01-08 11:14:19 +08:00
    不关 IDE 的事吧, windows 的锅
    ericgui
        26
    ericgui  
    OP
       2017-01-08 14:45:55 +08:00
    @msg7086
    @canfoderiskii 谢谢,既然都推荐 smartgit ,那我试试吧。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5337 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 07:46 PVG 15:46 LAX 23:46 JFK 02:46
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86