V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
Vveeb
V2EX  ›  问与答

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

  •  
  •   Vveeb · Dec 22, 2020 · 3785 views
    This topic created in 1962 days ago, the information mentioned may be changed or developed.

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

    24 replies    2020-12-23 11:37:43 +08:00
    xe2vherd
        2
    xe2vherd  
       Dec 22, 2020
    .git/info/exclude
    basefas
        3
    basefas  
       Dec 22, 2020   ❤️ 2
    不要 git add 这个文件就好
    hakono
        4
    hakono  
       Dec 22, 2020   ❤️ 1
    目测 LZ 已经把 git add * 用得炉火纯青了
    f6x
        5
    f6x  
       Dec 22, 2020
    每次提交确认文件列表, 不是应该有的好习惯么....
    ZZITE
        6
    ZZITE  
       Dec 22, 2020   ❤️ 1
    .git/info/exclude
    项目目录下有个.git 文件,看不到的话搜索下怎么显示。然后在底下这个文件里把不需要提交的文件添加进去
    ZZITE
        7
    ZZITE  
       Dec 22, 2020
    .git 文件夹
    wgbx
        8
    wgbx  
       Dec 22, 2020
    git update-index --assume-unchanged
    huang86041
        9
    huang86041  
       Dec 22, 2020
    我觉得这样刚好能让你提交的时候确认一下提交文件.蛮好
    Vveeb
        10
    Vveeb  
    OP
       Dec 22, 2020
    @hakono 萌新,命令行敲命令什么的,根本不会去做的,只是用 VS 自带的 Git 界面这样,鼠标点一点就能完活儿,哇敲好用的~
    misaka19000
        11
    misaka19000  
       Dec 22, 2020   ❤️ 1
    设置全局 ignore
    Vveeb
        12
    Vveeb  
    OP
       Dec 22, 2020
    @basefas 对的,我应该是没有 add 的,VS 里面的自带的 Git changes 窗口显示的更改数,我没有加到暂存区或者提交什么的,什么都没做。这种情况下我试了把别人的分支 merge 进来是可以的,但是如果我想 rebase 的话,会提示我有未提交的更改,不知道是不是因为我有更改没有 add+commit 的问题导致的?
    Vveeb
        13
    Vveeb  
    OP
       Dec 22, 2020
    @zmxnv123 具体怎么操作呢? 是不是我把文件名 “ccc.cs” 添加到这个文件里就可以了?
    Vveeb
        14
    Vveeb  
    OP
       Dec 22, 2020
    @ZZITE Ohhhhh !成功了!简单且有效,thanks !添加文件之后在 VS 里,文件没有被立即忽略掉,我随便改了一下文件再保存,它就不在 git changes 的列表里了!
    shuqin2333
        15
    shuqin2333  
       Dec 22, 2020
    一般用 idea 操作 git,可以创建多个 change list,提交时提交某个 list 就行了
    basefas
        16
    basefas  
       Dec 22, 2020
    @Vveeb 没用过 VSCode 的 Git 功能,刚才看了下,在设置中搜索 Git: Untracked Changes 选择 separate,就可以在 UI 上区分出 Changes 和 Untracked Changes,其中已经 git add 的文件标记为 A,未追踪的文件标记未 U,文件后边有个加号的图标就表示 git add,所以你操作时,不要把你不想追踪的文件也点击那个加号就可以。希望能帮你找到问题的原因。
    HENQIGUAI
        17
    HENQIGUAI  
       Dec 22, 2020
    把 ccc 文件放到别的文件夹下面去,既然是一个和此仓库无关的文件,干嘛非得放在仓库的目录里呢。
    Vveeb
        18
    Vveeb  
    OP
       Dec 22, 2020
    @HENQIGUAI 嗐,ccc 其实就是个子类啦,在写基类的时候,想时不时地在子类里调调方法,改改属性这样的,然而这个子类只是我自己测试用的,不是业务需要的。所以说我还在想,有没有一种方法我可以创建个“本地-私人用-dev”分支,这里有全部我自己加的乱七八糟的文件,而且可以用这个分支保存我的修改记录。然后创建个“本地-作业用-dev”分支,这个分支里只有 A 、B 两个文件,我在“本地-私人用-dev”分支里一通开发完了,只把 A 、B 俩文件的修改并到我的“本地-作业用-dev”分支上,然后提交+推送,而且切换到我的作业用分支,里面也只有 A 、B 俩文件,这样的。不知道可不可以这样操作的说
    Vveeb
        19
    Vveeb  
    OP
       Dec 22, 2020
    @victor 嗯嗯,还得是官方文档!谢谢!
    nextvay
        20
    nextvay  
       Dec 22, 2020
    ## 没有 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  
       Dec 22, 2020
    思路:新建一个文件夹 供放置你觉得是临时文件的文件,在 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  
       Dec 22, 2020 via iPhone
    用 GitHub Desktop 打开,写好 commit 并提交,之后回有提交凭据的地方 push
    shm7
        23
    shm7  
       Dec 22, 2020 via iPhone
    git stash
    Vveeb
        24
    Vveeb  
    OP
       Dec 23, 2020
    @charlie21 也是个不错的选择吼,现在还是暂时用 exclude 吧~
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   922 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 57ms · UTC 21:17 · PVG 05:17 · LAX 14:17 · JFK 17:17
    ♥ Do have faith in what you're doing.