如何管理我不想在 git 中推送的更改?



有时我需要对我永远不想推送的本地树进行更改。 这些可能只是对运行测试的脚本的黑客攻击。 当我在本地树中有此更改时,我可能会提交其他实际更改。

问题:

  • 如果我不提交黑客攻击,那么我必须小心使用commit -a
  • 如果我不提交黑客,那么很难看到我是否进行了我确实想要提交到同一文件的更改。
  • 如果我确实犯了黑客,那么我必须小心不要推动它。

现在我正在提交带有提交描述的黑客,提醒我不要推动它们。 然后,当我工作并积累实际更改时,我会将黑客重新定位到分支的 HEAD。

有没有更好的方法来管理这样的变化?

在 git 中没有这种可能性来忽略文件中的某些更改,但会跟踪其他更改。通常,此类问题应通过配置应用程序来解决。我的意思是,如果你有黑客,它们不应该像那样硬编码(不知道你使用什么语言,所以它是一些伪代码):

someMethod() {
   doWork();
   dirtyHack();
   doSomeOtherWork();
}

您最好有一个配置文件来描述是否应该在当前配置中执行黑客攻击。所以代码可以像这样修改:

someMethod() {
   doWork();
   if (readConfig().isDirtyHacksEnabled()) {
       dirtyHack();
   }
   doSomeOtherWork();
}

此方法允许您在计算机和远程服务器(或所需的任何位置)上具有不同的配置文件。并且应该使用以下命令在 git 中忽略这个特定的配置文件:

git update-index --skip-worktree <path_to_file>

因此,您可以在 git 中跟踪脚本文件更改,而黑客只能在您的计算机上启用。不要将--skip-worktree--assume-unchanged混淆。当你设置最新的标志时,你承诺 git 不做任何更改,所以 git 可以跳过检查文件的索引,如果文件很大或文件系统很慢,可以节省一些时间。

使用 --assume-unchanged 将文件标记为(暂时)忽略提交:

git update-index --assume-unchanged <file>

然后,您可以使用以下内容取消标记:

git update-index --no-assume-unchanged <file>

使用: git stash 存储它们然后,您可以根据需要进行真正的更改,提交并在以后取消存储黑客更改

最新更新