Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GIT cherry将存在于一个分支中的所有提交选择到另一个分支_Git_Cherry Pick_Git Cherry Pick - Fatal编程技术网

GIT cherry将存在于一个分支中的所有提交选择到另一个分支

GIT cherry将存在于一个分支中的所有提交选择到另一个分支,git,cherry-pick,git-cherry-pick,Git,Cherry Pick,Git Cherry Pick,我有两个分支A和B。分支B在某个时候是从分支A分支出来的,多个用户正在向这两个分支提交。我想从分支B到分支A挑选我的所有提交(分支A中还不存在),而不需要手动搜索每个提交。 这有可能吗 谢谢解决了这个问题并制作了这个PowerShell脚本: $Source = Read-Host -Prompt 'Enter Source branch: ' $Target = Read-Host -Prompt 'Enter Target branch: ' cd C:\project git log $S

我有两个分支A和B。分支B在某个时候是从分支A分支出来的,多个用户正在向这两个分支提交。我想从分支B到分支A挑选我的所有提交(分支A中还不存在),而不需要手动搜索每个提交。 这有可能吗


谢谢

解决了这个问题并制作了这个PowerShell脚本:

$Source = Read-Host -Prompt 'Enter Source branch: '
$Target = Read-Host -Prompt 'Enter Target branch: '
cd C:\project
git log $Source --not $Target --cherry --author=my@ema.il --author-date-order --reverse | 
Select-String -Pattern "commit" |
ForEach-Object { git cherry-pick -x $_.ToString().split("+")[-1].Trim(' ') }

找到了答案并制作了以下PowerShell脚本:

$Source = Read-Host -Prompt 'Enter Source branch: '
$Target = Read-Host -Prompt 'Enter Target branch: '
cd C:\project
git log $Source --not $Target --cherry --author=my@ema.il --author-date-order --reverse | 
Select-String -Pattern "commit" |
ForEach-Object { git cherry-pick -x $_.ToString().split("+")[-1].Trim(' ') }

更直截了当的方法是使用rebase--ON:

如果您的回购协议如下所示:

a - B - c - d - e -> master
      \      \
       \      f - g -> some-feature
        \
         h - i - j -> branch-to-move
命令

git rebase --onto some-feature B branch-to-move
会导致

a - B - c - d - e -> master
             \
              f - g -> some-feature
                   \
                    h' - i' - j' -> branch-to-move

更直截了当的方法是使用rebase--ON:

如果您的回购协议如下所示:

a - B - c - d - e -> master
      \      \
       \      f - g -> some-feature
        \
         h - i - j -> branch-to-move
命令

git rebase --onto some-feature B branch-to-move
会导致

a - B - c - d - e -> master
             \
              f - g -> some-feature
                   \
                    h' - i' - j' -> branch-to-move

这听起来像是可以通过交互式重基来完成的事情?如果您想要所有提交,最好将B合并到A。或者我遗漏了什么?我只想要由我提交,而不是其他用户提交。我不能合并或重新设置这些分支的基础,因为我不是它们的所有者。好吧,然后按照奥利弗的建议进行交互式重新设置基础可能就可以了。首先,分支机构没有“所有者”,其次,只要您不将本地分支机构推到远程回购,它就不会影响其他任何人。只需执行一个
git-rebase-ia
并保持提交(删除或注释其他行)。然后你可以将B合并到A中。而不必按B。这听起来像是可以通过交互式重基来完成的事情?如果你想要所有的提交,最好将B合并到A中。还是我遗漏了什么?我只想要由我提交,而不是其他用户提交。我不能合并或重新设置这些分支的基础,因为我不是它们的所有者。好吧,然后按照奥利弗的建议进行交互式重新设置基础可能就可以了。首先,分支机构没有“所有者”,其次,只要您不将本地分支机构推到远程回购,它就不会影响其他任何人。只需执行一个
git-rebase-ia
并保持提交(删除或注释其他行)。然后你可以把B合并成A,而不用按B