不要逐个签出git签出文件,而是签出整个提交

不要逐个签出git签出文件,而是签出整个提交,git,bitbucket,git-commit,git-checkout,Git,Bitbucket,Git Commit,Git Checkout,我有一个情况,我致力于一个分支B1。在提交中,我有几个文件。现在我想把这些文件复制到分支B2 实际上,我正在对当前分支B2上的提交中的每个文件使用以下命令: $ git checkout B1 path/to/file1 $ git checkout B1 path/to/file2 ...... $ git checkout B1 path/to/fileN 我想应该有一种语法允许我直接签出从分支B1到分支B2的特定提交。我尝试了几种解决方案,但他们正在重写我不想要的整个分支,以及所

我有一个情况,我致力于一个分支B1。在提交中,我有几个文件。现在我想把这些文件复制到分支B2

实际上,我正在对当前分支B2上的提交中的每个文件使用以下命令:

 $ git checkout B1 path/to/file1
 $ git checkout B1 path/to/file2
 ......
 $ git checkout B1 path/to/fileN
我想应该有一种语法允许我直接签出从分支B1到分支B2的特定提交。我尝试了几种解决方案,但他们正在重写我不想要的整个分支,以及所有文件的历史记录。我只需要特定提交中文件的状态。覆盖不是问题

如何做到这一点

git checkout B1 .
您必须指定一个路径才能获得所需的内容,因此
是一个指定当前目录的路径


您必须指定一个路径才能获取所需内容,因此
是一个指定当前目录的路径。

要获取在提交
xyz
中修改的文件列表,请运行:

# get only the names for the diff between xyz's parent and xyz :
git diff --name-only xyz^ xyz
如果只想签出这些文件:

git checkout B1 -- $(git diff --name-only xyz^ xyz)

# for example : the files modified in the last commit on B2 :
git checkout B1 -- $(git diff --name-only B2^ B2)

要获取在提交
xyz
中修改的文件列表,请运行:

# get only the names for the diff between xyz's parent and xyz :
git diff --name-only xyz^ xyz
如果只想签出这些文件:

git checkout B1 -- $(git diff --name-only xyz^ xyz)

# for example : the files modified in the last commit on B2 :
git checkout B1 -- $(git diff --name-only B2^ B2)

我忘了提到所有文件不在同一目录下,也不一定具有相同的扩展名我忘了提到所有文件不在同一目录下,也不一定具有相同的扩展名您想获得“B1中的完整repo”吗?或者“仅在B1上的上次提交中修改的文件”?是否要获得“B1中的完整回购”?或者“只有在B1上的上次提交中修改的文件”将尝试,如果works将其标记为最佳答案,则将尝试,如果works将其标记为最佳答案