V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
honmaple
V2EX  ›  git

git 本地比远程新怎么办

  •  
  •   honmaple · 2015-10-22 21:54:06 +08:00 · 3585 次点击
    这是一个创建于 3349 天前的主题,其中的信息可能已经有所发展或是发生改变。
    平时都是 git add,git commit,git push,再或是 git status ,今天上 github 看了下才发现删除本地文件时忘记 git rm,导致 github 上有很多兀余文件,总不能一个一个删除,请教应该怎样将远程库的兀余文件删除
    ps:难道只能 git rm *,然后再将本地文件 git push
    11 条回复    2015-10-23 15:11:54 +08:00
    cxbig
        1
    cxbig  
       2015-10-22 22:00:58 +08:00
    是的, git rm > git commit > git push
    Mr2
        2
    Mr2  
       2015-10-22 22:01:56 +08:00
    force push
    loddit
        3
    loddit  
       2015-10-22 22:11:30 +08:00
    我的建议是首先装一个 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  
       2015-10-22 22:12:47 +08:00
    囧 没有预览,似乎 markdown 语法错了

    ```
    test markdown
    ```
    chairuosen
        5
    chairuosen  
       2015-10-22 22:12:57 +08:00
    用 sourceTree 管理
    ceyes
        6
    ceyes  
       2015-10-22 22:45:19 +08:00
    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  
       2015-10-23 03:17:49 +08:00 via Android
    用个带 GUI 的 git 客户端吧,不知道为什么很多人明知道有提高效率的工具,却一直不肯用。
    fengyqf
        8
    fengyqf  
       2015-10-23 09:37:07 +08:00
    是不很明白楼主的意思,是不是这样:
    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  
       2015-10-23 09:51:40 +08:00
    @loddit 是单引号,不是这个点
    joshz
        10
    joshz  
       2015-10-23 12:22:56 +08:00 via Android
    以前好像碰到同样的问题,搜 SO 解决的
    honmaple
        11
    honmaple  
    OP
       2015-10-23 15:11:54 +08:00 via Android
    不好意思,是我的错,因为我是用框架在外部目录生成文件,然后编辑调试好后复制到本地仓库覆盖原文件,再上传的,没想到有的文件没有被覆盖,也没被删除,留了下来,今天将所有文件夹看了遍后才发现,多谢各位的回答
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2644 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 15:18 · PVG 23:18 · LAX 07:18 · JFK 10:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.