在 git 中,如何在进行您永远不想提交的更改后记录对文件的更改

  • 本文关键字:提交 文件 记录 不想 永远 git git
  • 更新时间 :
  • 英文 :


场景:

  1. 为您自己的本地计算机特定的详细信息更新web.config[git显示web.config已更改]
  2. 更新索引以假定未更改:git update-index --assume-unchanged web.config[git显示web.config未更改]
  3. 暂停/做工作/放弃等
  4. 对需要提交的web.config进行更改,与上述更改无关[git显示未更改]**理想情况下,git可以显示与我们绝对不想要的更改不同的更改

对于第一步,是否有一种方法可以将您不希望的更改签入到索引中,从而表明就初始环境设置的git而言,web.config没有更改。类似git update-index --ignored-update web.config

接下来,在步骤4中,让git-diff-web.config只显示刚刚签入索引的内容之间的差异,并让只显示diff和commit中的更改。

请注意,我知道git更新索引——假设不变和——跳过工作树,这两个选项都不适合这种情况。假设没有变化,跳过工作树不会看到步骤4中的变化。

而且,我知道这是一个交互式git作业,是的,我广泛使用它,然而,有两个问题。。。当使用"假设未更改"时,更改后的文件不再被检测为不同

我认为git没有那种粒度。

你能做的是:

更新git的索引以重新考虑更改,隐藏您的更改,应用您想要的更改,提交它,应用隐藏并再次考虑:

$ git update-index --no-assume-unchanged web.config
$ git stash
#apply and commit your changes
$ git stash pop
$ git update-index --assume-unchanged web.config

当我有一些不想提交的本地修改时,我用一个特定的名字保存在我的储藏室里。

恢复"假定未更改的标志">

$ git update-index --no-assume-unchanged web.config

现在你有了想要的和不想要的改变。您可以使用commit --patch/-p:提交想要的

$ git commit -p web.config

这使您可以交互式地选择要提交的更改。提交之后,web.config中只保留您不打算保留的更改。

如果一些想要的和不想要的更改很接近(在同一块中),您可以在交互提交期间使用s命令(将块拆分为更小的)。对于过于接近的某些更改,无法执行此操作。在这种情况下,分离更改需要手动操作。(这是一个很好的例子,可以在进行过程中进行大量的小提交,而不是允许不相关的更改累积。)

根据您不希望签入的更改的性质,"clean"one_answers"smooth"过滤器可能是一个不错的选择。这些过滤器可以在签出时以任意方式转换文件(例如,将用户名和密码插入数据库配置文件),并在将其添加到索引时以不同的方式再次转换(例如,用伪占位符替换真实的用户名和密码)。

例如:

# configure the clean/smudge filters
git config filter.userpass.clean 
"sed -e 's/^user:.*/user: @USER@/' -e 's/^pass:.*/pass: @PASS@/'"
git config filter.userpass.smudge 
"sed -e 's/^user:.*/user: myuser/' -e 's/^pass:.*/pass: mypass/'"
echo "/web.config filter=userpass" >>.git/info/attributes
# create web.config
cat <<EOF >web.config
user: foo
pass: bar
EOF
git add web.config
# make sure the clean filter works.  notice that it shows @USER@ and
# @PASS@, not foo and bar
git diff --cached 
# make sure the smudge filter works too
rm web.config
git checkout web.config
cat web.config # it should show myuser and mypass    

或者,您可以关闭假定的未绑定位,并执行git add -p来对web.config进行部分编辑,但不是全部编辑。

最新更新