Cod*_*eef 1294 git git-add git-commit git-rm
我有一个Git仓库,我已经删除了使用rm
(不是 git rm
)的四个文件,我的Git状态如下所示:
# deleted: file1.txt
# deleted: file2.txt
# deleted: file3.txt
# deleted: file4.txt
Run Code Online (Sandbox Code Playgroud)
如何从Git中删除这些文件,而无需手动浏览并添加如下所示的每个文件:
git rm file1 file2 file3 file4
Run Code Online (Sandbox Code Playgroud)
理想情况下,我正在寻找能够以同样方式工作的东西git add .
,如果可能的话.
car*_*arl 2275
$ git add -u
Run Code Online (Sandbox Code Playgroud)
这告诉git自动暂存跟踪的文件 - 包括删除以前跟踪的文件.
分阶段整个工作树:
$ git add -u :/
Run Code Online (Sandbox Code Playgroud)
仅仅暂存当前路径:
$ git add -u .
Run Code Online (Sandbox Code Playgroud)
小智 1354
git ls-files --deleted -z | xargs -0 git rm
Run Code Online (Sandbox Code Playgroud)
可能是你在找什么..它对我有用..
Cod*_*lan 729
您可以使用
git add -u
Run Code Online (Sandbox Code Playgroud)
要将已删除的文件添加到暂存区域,请提交它们
git commit -m "Deleted files manually"
Run Code Online (Sandbox Code Playgroud)
Emi*_*Sit 355
如果您只是运行:
git add -u
Run Code Online (Sandbox Code Playgroud)
git将更新其索引,以便知道您删除的文件实际上应该是下一次提交的一部分.然后你可以运行"git commit"来检查那个变化.
或者,如果您运行:
git commit -a
Run Code Online (Sandbox Code Playgroud)
它将自动进行这些更改(以及任何其他更改)并提交它们.
更新:如果您只想添加已删除的文件,请尝试:
git ls-files --deleted -z | xargs -0 git rm
git commit
Run Code Online (Sandbox Code Playgroud)
Dus*_*tin 165
你可能正在寻找-A:
git add -A
Run Code Online (Sandbox Code Playgroud)
这类似于git add -u,但也添加了新文件.这大致相当于hg的addremove
命令(尽管移动检测是自动的).
Sae*_*ini 93
台数只已删除的文件:
for x in $(git status | grep deleted | awk '{print $2}'); do git rm $x; done
Run Code Online (Sandbox Code Playgroud)
或者(xargs方式):
git status | awk '/deleted/ {print $2}' | xargs git rm
Run Code Online (Sandbox Code Playgroud)
您可以为首选命令集设置别名,以方便以后使用.
Pea*_*ker 61
git rm test.txt
Run Code Online (Sandbox Code Playgroud)
删除实际文件之前或之后.
小智 49
通过使用带有'--all'或'--update'选项的git-add,您可能会得到比您想要的更多.新的和/或修改过的文件也将添加到索引中.我有一个bash别名设置,当我想从git中删除已删除的文件而不触及其他文件时:
alias grma='git ls-files --deleted -z | xargs -0 git rm'
Run Code Online (Sandbox Code Playgroud)
已从文件系统中删除的所有文件都将添加到已删除的索引中.
Ste*_*ual 39
并不是真的很重要,但我不同意所选择的答案:
git add -u
Run Code Online (Sandbox Code Playgroud)
...如果已删除工作树中的相应文件,将从索引中删除文件,但它也会暂存已修改的跟踪文件的新内容.
git rm $(git ls-files --deleted)
Run Code Online (Sandbox Code Playgroud)
...另一方面,只会删除被跟踪的已删除文件.
所以后者在我看来是更好的选择.
Spo*_*ser 29
如果这些是唯一的变化,你可以简单地做
git commit -a
Run Code Online (Sandbox Code Playgroud)
提交所有更改.这将包括已删除的文件.
Sij*_*ian 20
git ls-files --deleted | xargs git rm
Run Code Online (Sandbox Code Playgroud)
是仅添加已删除文件的最佳选项.
这是一些其他选择.
git add . => Add all (tracked and modified)/new files in the working tree.
git add -u => Add all modified/removed files which are tracked.
git add -A => Add all (tracked and modified)/(tracked and removed)/new files in the working tree.
git commit -a -m "commit message" - Add and commit modified/removed files which are tracked.
Run Code Online (Sandbox Code Playgroud)
小智 16
git add -u
-u --update仅匹配索引中已跟踪的文件而不是工作树.这意味着它永远不会暂存新文件,但它会暂存已修改的跟踪文件的新内容,并且如果已删除工作树中的相应文件,它将从索引中删除文件.
如果没有,则默认为"."; 换句话说,更新当前目录及其子目录中的所有跟踪文件.
Hou*_*dri 14
这个简单的解决方案适合我:
git rm $(git ls-files --deleted)
Run Code Online (Sandbox Code Playgroud)
alb*_*and 14
git rm $(git ls-files -d)
Run Code Online (Sandbox Code Playgroud)
删除命令列出的所有文件git ls-files
(-d 仅显示已删除的文件)。不适用于文件名或路径中带有空格的文件,但易于记住
Eva*_*ran 11
如果你想将它添加到你.gitconfig
这样做:
[alias]
rma = !git ls-files --deleted -z | xargs -0 git rm
Run Code Online (Sandbox Code Playgroud)
然后你要做的就是运行:
git rma
Run Code Online (Sandbox Code Playgroud)
git ls-files --deleted -z | xargs -0 git rm --cached
Run Code Online (Sandbox Code Playgroud)
这将删除之前由git跟踪的所有已删除文件,以及处理文件名中包含空格的情况.
根据您的POSIX变体,您可能需要使用xargs -0 -r
:这将导致xargs
在管道空内容时正常退出.
编辑:--cached
和--deleted
标志串联使用,以防止意外删除尚未删除的文件.
即使您有大量要处理的文件,以下内容也可以使用:
git ls-files --deleted | xargs git rm
Run Code Online (Sandbox Code Playgroud)
您可能还想提交评论.
有关详细信息,请参阅: 有用的Git脚本
试试吧.
-a
--all
Tell the command to automatically stage files that have been modified and deleted, but new files you have not told Git about are not affected.
git add . && git commit -m -a "Your commit"
Run Code Online (Sandbox Code Playgroud)
要么
git add --all && git commit -m "Your commit"
Run Code Online (Sandbox Code Playgroud)
请-t
用以查看实际运行的命令
我只是调整了Virender的答案来做同样的事情:
git ls-files --deleted -z | xargs -t -0 git rm
Run Code Online (Sandbox Code Playgroud)
git-add的所有标志都不会仅删除已删除的文件; 如果您修改了所有已删除的文件,那么您没问题,但除此之外,您需要运行git-status并解析输出.
根据Jeremy的回答,这就是我得到的:
git status | sed -s "s/^.*deleted: //" | grep "\(\#\|commit\)" -v | xargs git rm
Run Code Online (Sandbox Code Playgroud)
grep -v
行.git rm
.现在将它粘贴在shell别名中......
如上所述
git add -u
Run Code Online (Sandbox Code Playgroud)
将删除的文件分阶段删除,但也修改了文件以进行更新.
要取消暂存已修改的文件,您可以执行此操作
git reset HEAD <path>
Run Code Online (Sandbox Code Playgroud)
如果你想保持你的提交有条不紊和干净.
注意:这也可能会删除已删除的文件,因此请小心使用这些通配符.
归档时间: |
|
查看次数: |
467274 次 |
最近记录: |