假设不变,但直到下一次更改

时间:2014-11-02 13:09:32

标签: git

如何告诉git忽略对文件foobar的当前修改,而不是将来的任何修改?

我在我的worktree中有一个文件,我做了一个小改动,我不想回复。我可以使用git update-index --assume-unchanged foobar,但是git将忽略对此文件所做的任何其他更改。

我想告诉git只忽略对foobar当前修改,并警告我是否已经以任何其他方式进行了更改。

因此,考虑到update-index --assume-unchanged在这种情况下不适用,是否有另一种方法告诉git只要它具有当前内容或当前{{1 }}?

2 个答案:

答案 0 :(得分:1)

  

该文件在两台计算机之间共享;它被旧版本的应用程序更改,删除由较新版本创建且不理解的配置密钥。

那么版本该文件会更好,而不是版本:

  • 该文件的模板
  • 2个值文件(每台计算机一个)
  • 能够生成最终文件的脚本(将保持私有)
  • 一个.gitignore来声明一个 content filer driver ,一个涂抹脚本,它会在结帐时自动触发脚本并生成正确的配置文件,并使用正确的值,检测它在哪台计算机上运行。

smudge

(图片来自" Customizing Git Attributes"来自Git Book

答案 1 :(得分:1)

  

如何告诉git忽略当前对文件所做的修改   foob​​ar,但没有任何未来的修改?

如果将“忽略”概念放在比索引和存储库级别的低级别存储更高的级别上,那么您将获得更高的灵活性,并且您只需稍微调整您的工作流程/流程。

假设我正在研究我的新的hello world程序,但我需要在开发时添加一些调试,这不是我想成为最终交付的一部分。在这种情况下我所做的只是将该更改作为正常提交签入,但是以特殊方式标记它,通过前缀和后缀提交消息,其中包含一个明显突出其他提交消息的字符串。

gitk screenshot

当我稍后想要完成工作时,我只是过滤掉所有临时提交。

$ git checkout -b deliver work
Switched to a new branch 'deliver'
$ git rebase -i master

然后使用提交消息的特殊标记,可以轻松查看要删除的提交内容:

pick fdbd12a Mininmal main.c
pick 21e3d6f hello world with arg support
pick a62ebac ========= DEBUG: print argc ========
pick 3160605 Use EXIT_SUCCESS
pick 0ec0ac6 constify message

# Rebase 8ce6878..0ec0ac6 onto 8ce6878
...

然后给了我一个干净的交付分支:

gitk screenshot

我可以合并到我想传达的任何分支中。


在您的情况下,您可以使用新配置密钥检查更改

git add yourfile
git commit -m "======== NEW CONFIG KEYS ========"

然后在交付时过滤掉那个提交,或者可能有一个单独的分支来处理这个提交唯一的区别。 E.g。

git checkout -b computer_new computer_old
git add yourfile
git commit -m "======== NEW CONFIG KEYS ========"
# do some work
git commit -am "some work 1"
git commit -am "some work 2"
git commit -am "some work 3"
# Rebase to put "NEW CONFIG KEYS" as the newest commit
git rebase -i computer_old

改变
pick xxxxx ======== NEW CONFIG KEYS ========
pick xxxxx some work 1
pick xxxxx some work 2
pick xxxxx some work 3

pick xxxxx some work 1
pick xxxxx some work 2
pick xxxxx some work 3
pick xxxxx ======== NEW CONFIG KEYS ========

然后将这些新工作提交合并回computer_old

git checkout computer_old
git merge computer_new^

(branch ^表示比分支上的最新提交更早的提交,例如合并直到包括“some some 3”提交)。