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

2020-12-22 09:44:17 +08:00
 Vveeb

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

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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/737713

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX