Git:如何更改所有文件以及文件夹或zip中的新文件?

Mr *_*ion 53 git

正如我的问题所说,在更改文件并在我的存储库中添加新文件之后,我通常使用git提交文件,但有时我需要将所有已修改/更改的文件复制到文件夹以便自行组织.

有选择吗?

Cas*_*bel 82

假设您的意思是尚未提交,并且想要打包当前具有本地修改的所有文件,您可以获取已修改文件的列表git ls-files --modified.如果您想要上次提交更改的文件,您可以使用git diff --name-only HEAD^.你离开的地方取决于你.例子:

zip modified-files.zip $(git ls-files --modified)
cp $(git ls-files --modified) ../modified-files
Run Code Online (Sandbox Code Playgroud)

请注意,这是使用当前工作树中的文件版本.

如果你有文件名中的空格,你将不得不更麻烦.

(当然,根据您真正想要做的事情,您可能正在寻找git stash,它会将所有已修改的文件存储起来并留给您一个干净的工作树,或者您可能只想让一个临时分支提交. )

  • 使用--parents来复制和创建文件夹:cp --parents $(git ls-files --modified)../ copyfolder / (7认同)
  • 我想我找到了我要找的东西:cp $(git ls-files --modified --others)modified-files.多谢. (2认同)

Sve*_*ach 62

要完全按照您的要求执行(假设您已经提交并希望创建上次提交更改的文件的存档),您可以执行以下操作:

git archive --format=zip HEAD `git diff HEAD^ HEAD --name-only` > a.zip
Run Code Online (Sandbox Code Playgroud)

如果您在提交中删除了文件,为了防止出现pathspec错误,请使用--diff-filter=d:

git archive --format=zip HEAD `git diff --diff-filter=d HEAD^ HEAD --name-only` > a.zip
Run Code Online (Sandbox Code Playgroud)

但也许您真的想要使用以下方法创建补丁:

git diff HEAD^ HEAD > a.patch
Run Code Online (Sandbox Code Playgroud)

并使用以下方法在需要的地方应用此补丁:

patch -p1 < a.patch
Run Code Online (Sandbox Code Playgroud)

当然,仅当目标目录已包含旧版本的存储库时,才应用补丁.

  • 我建议使用 `git format-patch` 而不是通过管道将 `git diff` 传输到文件 (2认同)
  • 一个问题是,当你删除某些东西时,你会收到错误:"致命:未找到路径:XYZ" (2认同)

Aft*_*ock 16

如果您使用TortoiseGIt,它也提供此功能.
在资源管理器中选择文件夹
右键单击,选择菜单,TortoiseGit->显示日志.

选择工作目录和最后一个提交的版本.
右键点击.比较修订版.选择要保存/导出的文件.
右键点击.导出到文件夹.完成.


Sai*_*han 8

将修改后的和新创建的文件压缩到 git 仓库中

zip mychanges.zip $({ (git ls-files --others --exclude-standard) ; (git ls-files --modified)})
Run Code Online (Sandbox Code Playgroud)