正如我的问题所说,在更改文件并在我的存储库中添加新文件之后,我通常使用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,它会将所有已修改的文件存储起来并留给您一个干净的工作树,或者您可能只想让一个临时分支提交. )
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)
当然,仅当目标目录已包含旧版本的存储库时,才应用补丁.
Aft*_*ock 16
如果您使用TortoiseGIt,它也提供此功能.
在资源管理器中选择文件夹
右键单击,选择菜单,TortoiseGit->显示日志.
选择工作目录和最后一个提交的版本.
右键点击.比较修订版.选择要保存/导出的文件.
右键点击.导出到文件夹.完成.
将修改后的和新创建的文件压缩到 git 仓库中
zip mychanges.zip $({ (git ls-files --others --exclude-standard) ; (git ls-files --modified)})
Run Code Online (Sandbox Code Playgroud)