使用Git将两次提交之间的不同文件复制到特定文件夹

时间:2018-04-15 17:58:36

标签: git

我试图找出如何从在给定提交中修改的Git存储库中获取文件。我想将'delta'存储在一个单独的文件夹中。我对Git很新,所以这可能是一个相对基本的问题,但仍然是..

我认为我应该先在版本中获取存储库:

git reset --hard a02ea0d

然后列出提交的内容:

git show --pretty="" --name-only a02ea0d

但那又怎么样?我可以将这个连接在一起以获得一些额外的文件夹,结果只是版本中的实际文件吗?

1 个答案:

答案 0 :(得分:3)

解决方案

git checkout <SHA of old commit>
git diff --name-only <SHA of old commit> <SHA of newer commit> | xargs git checkout-index -f --prefix='C:\changes\'

解释

git checkout <SHA of old commit>会导致以下git checkout-index从旧提交中复制文件。

git diff --name-only <SHA of old commit> <SHA of newer commit>将返回旧提交和新提交之间已更改的所有文件的列表。

xargs git checkout-index -f --prefix='C:\changes\'将获取第一个命令返回的所有文件(通过使用管道),并将每行用作以下git checkout-index命令的参数。

实施例

此示例中使用的环境是使用Git Bash运行Windows 10的计算机。

    某个文件夹中的
  • git init
  • 创建两个文件
    • 包含abc
    • 的file1.txt
    • 包含cba
    • 的file2.txt
  • git add之后的所有文件git commit他们
  • 更改file1.txt和file2.txt
    • file1.txt包含'abcabc'
    • file2.txt包含'cbacba'
  • git add之后的所有文件git commit他们
  • git log并找到第一次和第二次提交的SHA1
  • 应用我上面提供的解决方案

命令中指定的文件夹现在将包含在两个提交的提交之间更改的所有文件,如下所示。

  • file1.txt包含abc
  • file2.txt包含cba