当使用补丁添加文件到Git时,是否有一种方法可以添加未跟踪的文件?

4
所以我正在学习git add -p的乐趣。我曾使用Sourcetree或类似的GUI工具作为git add的一部分来审查更改,但现在我在命令行上使用它更好了。
但是,我感到沮丧的是我不能在同一个命令中添加未跟踪的文件。我想如果有这样的选项:git add -p --include-untracked就像其他内容一样将其视为补丁。
是否有更好的方法可以作为单个命令实现此操作?
1个回答

5

我不知道有直接实现此操作的选项,似乎是一个缺失的功能。以下是一些解决方法。

您可以在运行git add -p之前运行git add --intent-to-add .-N来跟踪所有未跟踪的文件。这不会添加它们的内容,并且它们的更改将显示在 git add -p中。您可以将其添加为别名到您的.gitconfig中。

[alias]
    addp = !git add -N . && git add -p

你可以使用交互模式 git add -i 进行更精细的控制,包括添加未跟踪的文件。

$ git add -i

*** Commands ***
  1: status       2: update       3: revert       4: add untracked
  5: patch        6: diff         7: quit         8: help
What now> 4
  1: foo
Add untracked>> 1
* 1: foo
Add untracked>> ^D
added 1 path

*** Commands ***
  1: status       2: update       3: revert       4: add untracked
  5: patch        6: diff         7: quit         8: help
What now> ^D
Bye.

$ git status
On branch master

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   foo

真棒!我现在已经使用 Git 很多年了,昨天刚刚遇到了相同的问题。考虑到你在这里所说的,我会说我们不再缺少一个新功能,而只是需要发送补丁给开发团队,然后只需将一个注释附加到现有消息中:“要通过补丁添加新文件,请首先使用 git -N”。 - Obsidian
1
@Obsidian 如果你在发送补丁文件,Git有一个强大的系统来处理补丁文件。但是,补丁文件很麻烦,而且失去了Git的许多功能。相反,考虑使用Git远程。 "开发团队,这是我的仓库网址,我的工作在feature分支中。" 然后他们可以 git remote add obsidian <url>git fetch obsidian,像任何其他分支一样合并 obsidian/feature - Schwern
再次感谢您提供这些详细信息。当然,当我说“发送补丁”时,是在全局意义上。我在Linux内核的补丁提交中使用这些命令(特别是在参加Eudyptula项目时),并为其他项目发起拉取请求。但我还是点赞了,因为这些信息对每个人都有用。 - Obsidian
1
那个 addp 别名是完美的解决方案。只可惜它不是默认的。我无法想象有任何情况下我不想添加新文件。我猜如果我刚开始并且还没有正确设置我的 .gitignore,那么可能会出现这种情况。但除此之外,在正常的代码流程中,新文件和更改的文件都是我想要暂存的工作的一部分,99% 的时间都是如此。所以现在我只需要重新训练我的大脑使用 git addp 就可以了。 - Dan Sharp

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