Comment Git extrait-il un certain commit d'une certaine branche ?
大家讲道理
大家讲道理 2017-05-02 09:32:03
0
5
1004

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 ?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

répondre à tous(5)
迷茫

Sur la branche A, exécutez

git cherry-pick <commit_id>
黄舟

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梦

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.

刘奇

Ne devrait être que du choix de chrysalide

淡淡烟草味

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
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal