V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Vveeb
V2EX  ›  问与答

求教: git 如何处理本地不想提交的文件?(不是添加到 ignore 文件)

  •  
  •   Vveeb · 2020-12-22 09:44:17 +08:00 · 2891 次点击
    这是一个创建于 1214 天前的主题,其中的信息可能已经有所发展或是发生改变。

    具体问题是这样的, 我的工作内容是项目里的两个文件 A,B,需要修改,提交,推送远程。然后为了方便,我在项目里加了一个 ccc 的文件,这个文件只是我想在本地用的,不想给它提交。 这样的话我在 Visual Studio 里工作的时候,每次提交都要手动选择 AB 两个文件提交,而且文件 ccc 会一直在更改区等着我提交。 我知道有种方法是把文件 ccc 添加到 gitignore 规则里,但是添加规则意味着“.gitignore”文件会被修改,文件修改就导致了这个文件等着我去提交,然而“.gitignore”文件是项目项目整体规定好的,我不能去提交“.gitignore”的修改。 所以说,有什么方法,能让我在当前工作分支愉快地修改 A 、B 、ccc 三个文件,还能够不让未提交的 ccc 文件更改影响我对分支的 merge 和 rebase ?

    24 条回复    2020-12-23 11:37:43 +08:00
    zmxnv123
        2
    zmxnv123  
       2020-12-22 09:51:15 +08:00
    .git/info/exclude
    basefas
        3
    basefas  
       2020-12-22 09:51:27 +08:00   ❤️ 2
    不要 git add 这个文件就好
    hakono
        4
    hakono  
       2020-12-22 09:53:41 +08:00   ❤️ 1
    目测 LZ 已经把 git add * 用得炉火纯青了
    f6x
        5
    f6x  
       2020-12-22 09:53:54 +08:00
    每次提交确认文件列表, 不是应该有的好习惯么....
    ZZITE
        6
    ZZITE  
       2020-12-22 09:56:47 +08:00   ❤️ 1
    .git/info/exclude
    项目目录下有个.git 文件,看不到的话搜索下怎么显示。然后在底下这个文件里把不需要提交的文件添加进去
    ZZITE
        7
    ZZITE  
       2020-12-22 09:57:05 +08:00
    .git 文件夹
    wgbx
        8
    wgbx  
       2020-12-22 09:57:44 +08:00
    git update-index --assume-unchanged
    huang86041
        9
    huang86041  
       2020-12-22 10:03:39 +08:00
    我觉得这样刚好能让你提交的时候确认一下提交文件.蛮好
    Vveeb
        10
    Vveeb  
    OP
       2020-12-22 10:11:14 +08:00
    @hakono 萌新,命令行敲命令什么的,根本不会去做的,只是用 VS 自带的 Git 界面这样,鼠标点一点就能完活儿,哇敲好用的~
    misaka19000
        11
    misaka19000  
       2020-12-22 10:16:27 +08:00   ❤️ 1
    设置全局 ignore
    Vveeb
        12
    Vveeb  
    OP
       2020-12-22 10:16:52 +08:00
    @basefas 对的,我应该是没有 add 的,VS 里面的自带的 Git changes 窗口显示的更改数,我没有加到暂存区或者提交什么的,什么都没做。这种情况下我试了把别人的分支 merge 进来是可以的,但是如果我想 rebase 的话,会提示我有未提交的更改,不知道是不是因为我有更改没有 add+commit 的问题导致的?
    Vveeb
        13
    Vveeb  
    OP
       2020-12-22 10:19:50 +08:00
    @zmxnv123 具体怎么操作呢? 是不是我把文件名 “ccc.cs” 添加到这个文件里就可以了?
    Vveeb
        14
    Vveeb  
    OP
       2020-12-22 10:34:05 +08:00
    @ZZITE Ohhhhh !成功了!简单且有效,thanks !添加文件之后在 VS 里,文件没有被立即忽略掉,我随便改了一下文件再保存,它就不在 git changes 的列表里了!
    shuqin2333
        15
    shuqin2333  
       2020-12-22 10:53:21 +08:00
    一般用 idea 操作 git,可以创建多个 change list,提交时提交某个 list 就行了
    basefas
        16
    basefas  
       2020-12-22 10:57:12 +08:00
    @Vveeb 没用过 VSCode 的 Git 功能,刚才看了下,在设置中搜索 Git: Untracked Changes 选择 separate,就可以在 UI 上区分出 Changes 和 Untracked Changes,其中已经 git add 的文件标记为 A,未追踪的文件标记未 U,文件后边有个加号的图标就表示 git add,所以你操作时,不要把你不想追踪的文件也点击那个加号就可以。希望能帮你找到问题的原因。
    HENQIGUAI
        17
    HENQIGUAI  
       2020-12-22 11:22:20 +08:00
    把 ccc 文件放到别的文件夹下面去,既然是一个和此仓库无关的文件,干嘛非得放在仓库的目录里呢。
    Vveeb
        18
    Vveeb  
    OP
       2020-12-22 11:59:14 +08:00
    @HENQIGUAI 嗐,ccc 其实就是个子类啦,在写基类的时候,想时不时地在子类里调调方法,改改属性这样的,然而这个子类只是我自己测试用的,不是业务需要的。所以说我还在想,有没有一种方法我可以创建个“本地-私人用-dev”分支,这里有全部我自己加的乱七八糟的文件,而且可以用这个分支保存我的修改记录。然后创建个“本地-作业用-dev”分支,这个分支里只有 A 、B 两个文件,我在“本地-私人用-dev”分支里一通开发完了,只把 A 、B 俩文件的修改并到我的“本地-作业用-dev”分支上,然后提交+推送,而且切换到我的作业用分支,里面也只有 A 、B 俩文件,这样的。不知道可不可以这样操作的说
    Vveeb
        19
    Vveeb  
    OP
       2020-12-22 13:25:39 +08:00
    @victor 嗯嗯,还得是官方文档!谢谢!
    nextvay
        20
    nextvay  
       2020-12-22 14:31:05 +08:00
    ## 没有 add 的可以用这个
    ignorev2(){
    n=1
    for comm in "$@"
    do
    # echo "第$n 个参数:" $comm
    echo $comm >> .git/info/exclude
    let n+=1
    done
    tail .git/info/exclude
    }

    unignorev2(){
    for comm in "$@"
    do
    `sed -i -e "s/$comm//g" .git/info/exclude`
    done
    `sed -i -e "/^[ ]*$/d" .git/info/exclude`
    tail .git/info/exclude
    }

    根据楼上的,写个 shell 多方便

    ## 已经 add 的可以用这个
    ignore(){
    git update-index --assume-unchanged $1
    }
    unignore(){
    git update-index --no-assume-unchanged $1
    }
    charlie21
        21
    charlie21  
       2020-12-22 14:38:36 +08:00
    思路:新建一个文件夹 供放置你觉得是临时文件的文件,在 git 系统里忽略整个此文件夹

    git ignore a folder simple way - Google 搜索
    https://stackoverflow.com/questions/343646/ignoring-directories-in-git-repositories-on-windows/37846411#37846411
    dingwen07
        22
    dingwen07  
       2020-12-22 14:53:18 +08:00 via iPhone
    用 GitHub Desktop 打开,写好 commit 并提交,之后回有提交凭据的地方 push
    shm7
        23
    shm7  
       2020-12-22 19:06:09 +08:00 via iPhone
    git stash
    Vveeb
        24
    Vveeb  
    OP
       2020-12-23 11:37:43 +08:00
    @charlie21 也是个不错的选择吼,现在还是暂时用 exclude 吧~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2264 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 00:51 · PVG 08:51 · LAX 17:51 · JFK 20:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.