'git add –patch'包含新文件?

当我运行git add -p ,有没有办法让gitselect新build的文件作为hunkselect?

因此,如果我创build一个名为foo.java的新文件,那么运行git add -p,git不会让我select将该文件的内容添加到索引中。

要对每个新文件执行此操作,可以运行:

 git add -N . git add -p 

如果你想经常使用它,你可以在~/.bashrc创build一个别名:

 alias gapan='git add --intent-to-add . && git add --patch' 

注意 :如果你使用这个空的新文件,git将无法修补它并跳到下一个。

当我尝试在新文件(未跟踪文件)上git add -p someNewFile.txt时,git只会输出No changes. 停下来 我不得不告诉git,我打算先跟踪新文件。

 git add -N someNewFile.txt git add -p 

然而,由于文件没有被跟踪,它将显示为一个不可分割的巨人(因为它全是新的!)。 所以,那么我需要将大块编辑成更小的位。 如果你不熟悉,请检查这个参考开始。

更新 – 大块编辑信息 我想更新,以防上述参考消失。 由于新文件未被跟踪, git add -p会将文件中的每一行显示为一个大块中的新行。 然后它会问你想用这个大块做什么,给你下面的提示:

Stage this hunk [y,n,q,a,d,/,e,?]?

假设你不想承诺整个文件(因此,整个文件,因为我不知道为什么你会想在这种情况下使用git add -p ?),你将要指定选项e告诉git你想编辑大块。

一旦你告诉git你想编辑大块,它应该把你放到你select的编辑器中,这样你就可以进行更改。 所有的行应该以+为前缀,而git在文件末尾有一些解释性注释(前缀为# )。 只需删除文件初始提交时不需要的任何行。 然后保存并退出编辑器。

Git对git的大块选项的解释:

 y - stage this hunk n - do not stage this hunk q - quit; do not stage this hunk or any of the remaining ones a - stage this hunk and all later hunks in the file d - do not stage this hunk or any of the later hunks in the file g - select a hunk to go to / - search for a hunk matching the given regex j - leave this hunk undecided, see next undecided hunk J - leave this hunk undecided, see next hunk k - leave this hunk undecided, see previous undecided hunk K - leave this hunk undecided, see previous hunk s - split the current hunk into smaller hunks e - manually edit the current hunk ? - print help 

git add -p实际上是将更改添加到已经跟踪的文件。

交互式select要添加的文件的命令是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> a 1: another-new.java 2: new.java Add untracked>> 2 1: another-new.java * 2: new.java Add untracked>> added one path *** Commands *** 1: status 2: update 3: revert 4: add untracked 5: patch 6: diff 7: quit 8: help What now> q Bye. $ git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) new file: new.java Untracked files: (use "git add <file>..." to include in what will be committed) another-new.java 

(真正的命令有颜色,我不能在这里剪切和粘贴,所以它比看起来好看)

其实, git add -i命令和git add -i是一样的,所以第二个是第一个的一个子集(即使我承认我喜欢add -p并且讨厌add -i我自己!)。

还有一个非常类似的方法使用 – --cached标志…

1) 把你的暂时更改变成阶段,就像你添加的文件。

 git add edited-file.txt git add new-file.txt git add directory-of-changes/ 

2)看差异(注意:你可以包括编辑和新文件)。

 git diff --cached 

3) 创build补丁。

 git diff --cached > my_patch_file.patch