Maison > Questions et réponses > le corps du texte
Il existe désormais deux branches, à savoir la branche A et la branche B. Il y a plusieurs soumissions sur chaque branche ;
Les commits de la branche A incluent a1, a2, a3, a4, a5, un total de cinq soumissions
Les commits de la branche B incluent b1, b2, b3, b4, b5, il y a cinq soumissions au total ;
est actuellement sur la branche A.
Remarque : les valeurs de hachage des 10 soumissions ci-dessus sont différentes.
Excusez-moi : comment puis-je extraire uniquement les nœuds de validation b2, b3 et b4 de la branche B vers la branche A ?
Nécessite qu'après avoir tiré vers la branche A, les informations de validation sur la branche B d'origine soient conservées.
S'il vous plaît, pause ╮( ̄▽  ̄)╭ ~
La méthode cherry-pick
mentionnée par @junnplus est correcte, et je peux le faire aussi ; mais existe-t-il une meilleure réponse ?
黄舟2017-05-02 09:34:03
Si l'automatisation n'est pas requise, le moyen le plus pratique est le suivant :
$ git rebase -i HEAD $name_of_branch_b
L'éditeur affichera cinq lignes de b1 à b5, supprimera les deux lignes b1 et b5, enregistrera et quittera.
过去多啦不再A梦2017-05-02 09:34:03
Il peut être difficile d'avoir une meilleure réponse, n'est-ce pas ? Selon le principe de git-flow
, dev-feature
ne fusionne généralement pas les quelques soumissions du milieu dans dev
Peut-être que le besoin du questionneur est basé sur la stratégie de gestion de versions déraisonnable Ou une stratégie très particulière. scène.
淡淡烟草味2017-05-02 09:34:03
Tout le monde a raison, il n'y a pas de bon moyen ; mais j'ai toujours ce besoin particulier dans mon processus de travail actuel.
Ce soir, j'ai utilisé mes faibles compétences en programmation shell pour écrire un programme qui peut répondre à mes besoins, et cela peut être réalisé grâce à cherry-pick
.
Ce petit programme peut répondre à mes besoins à condition qu'il soit exécuté comme suit :
# b5省略时取到最新的节点
cherry-picks B b2 b5
Ensuite, mes débuts : lien github
#!/usr/bin/env bash
# 初始化
targetBranch=
start=
end= #如果没有这读到最新
currentBranch=$(git symbolic-ref HEAD 2>/dev/null | cut -d"/" -f 3)
# 切换到目标分支
git checkout $targetBranch
echo start proccess commit message...
rawList=$(git log | grep '^commit' | sed '1,$s/commit//')
startIndex=$(echo "$rawList" | sed -n "/$start/=" )
# 如果end不为空,取得结束的偏移量,否则默认为1,也就是最新
if [ -n "$end" ]; then
endIndex=$(echo "$rawList" | sed -n "/$end/=")
else
endIndex=1
fi
# 取得需要cherry-pick的区间
list=$(echo "$rawList" | head -$startIndex | tail +$endIndex)
## 倒序
list=$(echo "$list" |sed '1!G;h;$!d')
echo '待cherry-pick的有:'
echo list:
echo "$list"
echo
# 切换回当前分支
git checkout $currentBranch
for i in "$list"; do
git cherry-pick $i
done
echo '完成'
exit 0