我有一种情况,我提交了一个分支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)