我有一个特别的问题是我的工作,我需要解析这些变化不连续上演提交。
如果这样做,git status --porcelain您将获得如下输出:
M change1
M change2
MM change3
M change4
M change5
Run Code Online (Sandbox Code Playgroud)
更改1和2已上演,更改3到5没有上演。MM表示我还没看过的东西。
我可以解析此输出,但是我想知道是否有更好的方法来仅在“的更改未针对提交进行更改 ”类别中显示文件git status。
您可以使用或来获取哪些跟踪文件具有未暂存的更改。git diff --name-onlygit ls-files . -m
您可以使用来获取未跟踪但未被忽略的文件git ls-files . --exclude-standard --others。(从这个答案)。
将它们放在一起,以获取所有不会被忽略且未跟踪或具有未暂存更改的文件。
git ls-files . --exclude-standard --others -m
Run Code Online (Sandbox Code Playgroud)
状态MM意味着有些变化已上演,有些变化尚未上演。
更准确地说,这意味着该路径的索引版本与版本HEAD\xe2\x80\x94(这是第一个M\xe2\x80\x94)不同,并且该路径的工作树版本与索引版本不同。
例如,假设您有一个自述文件并进行了更改:
\n\n$ echo stuff >> README; git add README; git status --porcelain\nM README\nRun Code Online (Sandbox Code Playgroud)\n\n现在您对同一文件进行第二次更改。为了使它特别有趣,让我们删除添加的stuff行:
$ ed README << \'end\'\n$d\nw\nq\nend\n2634\n2628\n$ git status --porcelain\nMM README\nRun Code Online (Sandbox Code Playgroud)\n\n现在,如果我们的git add文件,这会暂存与版本相同的工作树版本HEAD,并且:
$ git add README\n$ git status --porcelain\n$ \nRun Code Online (Sandbox Code Playgroud)\n\n\n\n\n我可以解析这个输出,但我想知道是否有更好的方法来显示“git status”的“未暂存的更改”中的文件。
\n
您需要决定如何处理处于此状态的文件,如果可能存在未合并状态\xe2\x80\x94,如果可能存在尚未解决冲突合并的文件,则这些是未合并文件\xe2\ x80\x94也该为他们做什么。
\n\n但一般来说,如果您想要diff,请使用git diff. 的子风格有很多diff:您可以将树(例如 for 的树HEAD)与索引或工作树进行比较,或者将两棵树进行相互比较。有关详细信息,请参阅文档,但简而言之,git diff将索引与工作树进行比较,因此对应于状态输出的第二列。
要使 diff 仅发出文件名,请使用--name-only. 所以git diff --name-only会给你带来可以上演的改变。(这对未跟踪的文件没有帮助;请参阅Schwern 的答案来使用git ls-files它。)
| 归档时间: |
|
| 查看次数: |
3855 次 |
| 最近记录: |