如何使我所更改的部分文件不被包含在提交中?

33
我使用的是TortoiseGit 1.8.3。 我修改了其中一个文件:Makefile,但我不想每次提交Git Commit时都将其提交。 我将其添加到“删除并添加到忽略列表”中,但这没有帮助。 如何使我更改的某些文件不在提交中出现?
我希望Makefile作为只读文件存在于远程存储库中,以便我可以在本地编辑它,然后TortoiseGit不会提示我提交它。
对于Git-bash,我想要的是:https://www.kernel.org/pub/software/scm/git/docs/git-update-index.html
4个回答

71

针对TortoiseGit 1.8.15,Git 2.6.1的回答。不需要返回到命令行,所有功能在TortoiseGit中直接可用。我试图总结出各种访问此功能的方式。

我假设读者知道“assume unchanged”的含义。这里有关于此功能的易于理解的文档。或者是关于--assume-unchanged或git ls-files的原始文档。


将文件标记为“假定未更改”

TortoiseGit中有三种可能性:在提交对话框中,在工作树对话框中(检查修改)或在日志信息对话框中(仅当选择了Working dir changes条目)。从其中一个对话框中执行以下操作:

  • 右键单击文件,选择条目假定未更改


Windows资源管理器的任何文件列表中执行以下操作:

  • 右键单击文件,选择属性
  • 转到Git选项卡
  • 选中条目假定有效/未更改

从文件中删除“假定未更改”标志(撤消上述操作):

TortoiseGit仅允许从工作树对话框(检查修改)中删除标志。

  • 在对话框的左下角:确保选中选项Show ignore local changeds flagged files
  • 所有带有假定有效跳过工作树标志的文件将显示在普通更改文件下方
  • 右键单击该文件,选择取消标记为跳过工作树或假定未更改

  • Windows资源管理器中的任何文件列表中执行以下操作:

    • 右键单击该文件,选择属性
    • 转到Git选项卡
    • 取消勾选假定有效/未更改条目

    1
    优秀的答案。 - Fanda

    34
    如果我正确理解问题的话,Alex想知道如何使用Tortoise Git撤消--assumed-unchanged操作。您不需要使用命令行Git来修复此问题:
    1. 在Windows文件资源管理器中导航到执行此操作的文件,
    2. 右键单击并选择属性,
    3. 选择Git选项卡,在那里您应该看到一个旁边勾选了"Assume valid/unchanged"的复选框。
    4. 取消勾选,它将不会被提交忽略。
    输入图像描述

    8
    批准的答案很好,但如果您正在寻找对话和选项,这里有一个简短的帮助: 在此输入图像描述 在此输入图像描述 在此输入图像描述

    3
    如果这没有帮助,那么你需要进入命令行界面,并检查以下内容:

    我想让Makefile在远程存储库中为只读,以便我可以在本地进行编辑,然后TortoiseGIT不会提示我提交它。

    这是不同的:

    你需要:

    git update-index  --really-refresh --no-assume-unchanged Makefile
    

    那将使任何对Makefile的本地修改对git“不可见”,同时保持Makefile在源代码控制下。
    如果您希望您的本地修改能够抵抗git reset,请执行以下操作;
    git update-index --skip-worktree Makefile
    

    我创建了.gitignore文件,将Makefile添加到其中,并提交了.gitignore。然后我通过rm命令删除了Makefile。运行status命令后,显示:deleted: Makefiles。接着我尝试进行提交,TortoiseGit提示我再次提交。我进行了提交和推送,结果Makefile从仓库中被删除了 - 但我并不想这样。我希望Makefile以只读的方式存在于远程仓库中,这样我就可以在本地编辑它,然后TortoiseGIT就不会提示我再次提交它。 - Alex
    1
    @Alex 好的,我已经编辑了我的答案以满足你的特定需求。 - VonC
    谢谢,它起作用了!我可以通过GUI TortoiseGIT->提交->右键单击文件->(跳过工作树)和(假定不变)来完成。否则,我可以通过git ls-files -t查看跳过的文件。我可以使用git update-index --no-skip-worktree取消“跳过”。并使用git update-index --really-refresh --assume-unchanged撤消假定。但是,我怎么能通过GUI TortoiseGIT撤消它呢? - Alex
    @Alex 不确定 TortoiseGit 是否支持撤销操作。 - VonC

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接