recherche

Maison  >  Questions et réponses  >  le corps du texte

Comment Git extrait-il un certain commit d'une certaine branche ?

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 ?

大家讲道理大家讲道理2795 Il y a quelques jours984

répondre à tous(5)je répondrai

  • 迷茫

    迷茫2017-05-02 09:34:03

    Sur la branche A, exécutez

    git cherry-pick <commit_id>

    répondre
    0
  • 黄舟

    黄舟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.

    répondre
    0
  • 过去多啦不再A梦

    过去多啦不再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.

    répondre
    0
  • 怪我咯

    怪我咯2017-05-02 09:34:03

    Ne devrait être que du choix de chrysalide

    répondre
    0
  • 淡淡烟草味

    淡淡烟草味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

    répondre
    0
  • Annulerrépondre