4

有时,某些文件会出现在工作树上。他们没有被追踪,

我们希望丢弃其中一些文件而不是暂存它们,但是,我们可能希望暂存它们。

我的问题是:我们是否可以使用某种交互命令逐步选择我们想要保留的文件以及我们想要忽略的文件?

希望我的问题很清楚。

4

2 回答 2

4

您可以玩弄git add -i以交互方式暂存文件。

$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       a
#       b
#       c
#       d
nothing added to commit but untracked files present (use "git add" to track)

$ git add -i
           staged     unstaged path


*** Commands ***
  1: status       2: update       3: revert       4: add untracked
  5: patch        6: diff         7: quit         8: help
What now> a
  1: a
  2: b
  3: c
  4: d
Add untracked>> 2
  1: a
* 2: b
  3: c
  4: d
Add untracked>> 4
  1: a
* 2: b
  3: c
* 4: d
Add untracked>> 
added 2 paths

*** Commands ***
  1: status       2: update       3: revert       4: add untracked
  5: patch        6: diff         7: quit         8: help
What now> s
           staged     unstaged path
  1:        +0/-0      nothing b
  2:        +0/-0      nothing d

*** 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:   b
#       new file:   d
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       a
#       c

虽然有点离题,但我只想添加以下信息:

git add -i比上述用例强大得多。例如,如果您只想在文件中添加部分更改,您可以使用该patch模式。

当我意识到我想将单个文件中的更改分成2个单独的提交时,我已经使用了补丁模式,地狱很多次,但我不想手动创建文件的副本,编辑原始文件,阶段,提交并为下一次提交再次执行相同的操作。

在补丁模式下,git 为您提供了将更改分解为更小的补丁并仅暂存这些大块的选项。如果 git 没有自动给你最好的块,你可以在编辑器提示中自己手动分解块。

于 2013-04-11T21:23:12.393 回答
1

您可以使用git add -i -A获取未跟踪文件的交互式提示。选择4: [a]dd untracked然后按数字或快捷方式字母切换列表中文件的包含。

不确定“比较两个存储库”是什么意思。任何存储库都可以git fetch用来添加任何其他存储库的内容,然后将生成的修订版(或在工作存储库的情况下,修改后的文件)与git diff.

于 2013-04-11T21:22:31.600 回答