git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
honmaple
V2EX  ›  git

git 本地比远程新怎么办

  •  
  •   honmaple · Oct 22, 2015 · 4389 views
    This topic created in 3865 days ago, the information mentioned may be changed or developed.
    平时都是 git add,git commit,git push,再或是 git status ,今天上 github 看了下才发现删除本地文件时忘记 git rm,导致 github 上有很多兀余文件,总不能一个一个删除,请教应该怎样将远程库的兀余文件删除
    ps:难道只能 git rm *,然后再将本地文件 git push
    11 replies    2015-10-23 15:11:54 +08:00
    cxbig
        1
    cxbig  
       Oct 22, 2015
    是的, git rm > git commit > git push
    Mr2
        2
    Mr2  
       Oct 22, 2015
    force push
    loddit
        3
    loddit  
       Oct 22, 2015
    我的建议是首先装一个 branch 是否 dirty 的检测工具,及时了解当前 branch 状态。
    另外如果你删除的文件没有在 gitignore 里,那 git status 的时候会就显示出你已经删除的文件。
    比如:
    ```
    On branch master
    Your branch is ahead of 'origin/master' by 6 commits.
    (use "git push" to publish your local commits)
    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)

    deleted: test.py

    ```
    这样的信息,这时你可以 commit 带上这个文件,就会在 commit 里把这些文件删除了。
    loddit
        4
    loddit  
       Oct 22, 2015
    囧 没有预览,似乎 markdown 语法错了

    ```
    test markdown
    ```
    chairuosen
        5
    chairuosen  
       Oct 22, 2015
    用 sourceTree 管理
    ceyes
        6
    ceyes  
       Oct 22, 2015
    git 本地比远程新怎么办 ?
    push 上去啊,开发流程不就是如此么。。。

    你本地删除了被 git 追踪的文件,此时 git status 肯定不是 clean 的,无法 pull && push ,当然需要 git rm <your files>; git commit ,要明白 git push 的是 commit ,不是文件。所有文件改动都是通过 commit 来进行的。

    如果想修整 commit (比如重写、合并、丢弃某些 commit ,或调整 commit 顺序),可以用 rebase ,再 git push --force 。你那想彻底删除文件及 commit 的需求可以通过 rebase 实现 —— 先合并 add file 和 rm file 的 commit ,再丢弃之,但要保证后续 commit 的可以正确的 apply ,取决于你的一个个 commit 是否够独立、逻辑清晰。
    lincanbin
        7
    lincanbin  
       Oct 23, 2015 via Android
    用个带 GUI 的 git 客户端吧,不知道为什么很多人明知道有提高效率的工具,却一直不肯用。
    fengyqf
        8
    fengyqf  
       Oct 23, 2015
    是不很明白楼主的意思,是不是这样:
    git 跟踪的文件里有个 file.txt ,你在某次提交时,直接在本地磁盘里删除了它,而不是 git rm file.txt ,然后继续提交。
    但突然发现 github 上这个文件还在,你想删除了它

    如果是,继续看下面:
    在本地 git status 时,是不是有
    Changes not staged for commit:
    .....
    deleted: test.py
    这样一行,确认一下,这些文件是不是都是需要在远程上删除的,如果是,请运行
    git add -u
    (或者运行 git add test.py ;注意,你没看错,是 add )
    然后这些文件将在下次提交时从 git 仓库里移除; push 后远程仓库上也没有了


    (按前面方法, git 历史里还有这个文件,还可以 checkout 出来,如果想从历史里彻底删除,请参看 git pro https://git-scm.com/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E9%87%8D%E5%86%99%E5%8E%86%E5%8F%B2#%E6%A0%B8%E6%AD%A6%E5%99%A8%E7%BA%A7%E9%80%89%E9%A1%B9%EF%BC%9Afilter-branch
    LioMore
        9
    LioMore  
       Oct 23, 2015
    @loddit 是单引号,不是这个点
    joshz
        10
    joshz  
       Oct 23, 2015 via Android
    以前好像碰到同样的问题,搜 SO 解决的
    honmaple
        11
    honmaple  
    OP
       Oct 23, 2015 via Android
    不好意思,是我的错,因为我是用框架在外部目录生成文件,然后编辑调试好后复制到本地仓库覆盖原文件,再上传的,没想到有的文件没有被覆盖,也没被删除,留了下来,今天将所有文件夹看了遍后才发现,多谢各位的回答
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3014 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 58ms · UTC 08:36 · PVG 16:36 · LAX 01:36 · JFK 04:36
    ♥ Do have faith in what you're doing.