我不确定我要找的是不是git-stash
,但这是我想做的事情。
我有为本地使用定制的配置文件,这些文件已经存在于Git中。 现在,如果我添加了一个新功能(更改其他文件),我希望将我的配置文件存储起来,然后提交只与新功能相关的文件。
如果我使用git-stash,它会把所有的东西都藏起来。 我该如何只暂存我的配置文件呢?
谢谢
我不确定我要找的是不是git-stash
,但这是我想做的事情。
我有为本地使用定制的配置文件,这些文件已经存在于Git中。 现在,如果我添加了一个新功能(更改其他文件),我希望将我的配置文件存储起来,然后提交只与新功能相关的文件。
如果我使用git-stash,它会把所有的东西都藏起来。 我该如何只暂存我的配置文件呢?
谢谢
有两件事情。
你应该只为提交而想要的文件进行暂存。这可以使用 git add
来完成。即使你有很多更改,你也可以使用 git add 只暂存你想要提交的字段(和使用 git add -p
暂存文件片段)。你应该这样做。
除非你的配置文件是应用程序的重要部分(并且你想对其进行版本控制),否则你应该将其 ignore
并不会进行版本控制。
使用git add -p
命令,只选择您想提交的更改。这是一个好习惯,因为它起到了一点代码审查的作用。
stash
意图将所有未提交的本地更改保存到一个临时未命名的分支中,这个分支的内部实质上与普通分支相同。
你可能甚至不应该检入配置文件,如果你这样做了,你应该将它放在一个仅在本地系统上合并的分支中。
#!/usr/bin/env ruby
# used to ignore modified files -- e.g configuration files
ret=%x{git status --porcelain}
files=ret.lines.map { |x| x.split[1] }
files.each do |file|
# makes files resistant to git reset hard
%x{git update-index --skip-worktree #{file}}
%x{git update-index --assume-unchanged #{file}}
end
对于git-unassume
#!/usr/bin/env bash
# used to ignore modified files -- e.g configuration files
cd .git
rm index
cd ..
git reset
通过这种方式,您可以修改配置文件,但是在状态和其他git add命令中被忽略。如果您改变主意,可以运行git-unassume。