C'est bizarre, mais je ne peux pas accomplir une opération assez courante avec git. Fondamentalement ce que je veux est de vérifier une branche de caractéristique, n'utilisant pas sa tête mais utilisant l'identification de SHA. Ce SHA pointe entre les fusions de la branche master. Le problème est que tout ce que je reçois est juste une branche maître sans un commit de la branche caractéristique. Actuellement, j'essaie de corriger une régression introduite plus tôt dans la branche master.Git. La branche de la fonctionnalité de paiement entre les validations de fusion
Juste pour être plus descriptif, je Crafted un petit script bash pour recréer un dépôt de problème:
#!/bin/bash
rm -rf ./.git
git init
echo "test1" > test1.txt
git add test1.txt
git commit -m "test1" -a
git checkout -b patches master
echo "test2" > test2.txt
git add test2.txt
git commit -m "test2" -a
git checkout master
echo "test3" > test3.txt
git add test3.txt
git commit -m "test3" -a
echo "test4" > test4.txt
git add test4.txt
git commit -m "test4" -a
echo "test5" > test5.txt
git add test5.txt
git commit -m "test5" -a
git checkout patches
git merge master
#Now how to get a branch having all commits from patches + test3.txt + test4.txt - test5.txt ???
Fondamentalement, tout ce que je veux est juste pour la branche caisse « patches » avec des fichiers 1-4, mais non compris test5.txt.
Faire: git checkout [sha_where_test4.txt_entered]
... juste donne une branche avec test1, test3, test4, mais à l'exclusion test2.txt
exemple plus complexe:
#!/bin/bash
rm -rf ./.git
git init
echo "test1" > test1.txt
git add test1.txt
git commit -m "test1" -a
git checkout -b patches master
echo "test2" > test2.txt
git add test2.txt
git commit -m "test2" -a
git checkout master
echo "test3" > test3.txt
git add test3.txt
git commit -m "test3" -a
echo "test4" > test4.txt
git add test4.txt
git commit -m "test4" -a
echo "test5" > test5.txt
git add test5.txt
git commit -m "test5" -a
git checkout patches
git merge master
echo "test6" > test6.txt
git add test6.txt
git commit -m "test6" -a
#Now how to get a branch having all commits from patches + test3.txt + test4.txt - test5.txt ???
git log --topo-order | cat
# Now I need something to help me going back to history
# without manually calculating that patches~2 sha's
git checkout -b patches.tmp master~1
git merge patches~2
Merci.
Assez soigné. Cela ressemble à une magie noire. J'essaie juste de comprendre pourquoi les commits se sont déplacés au-dessus des correctifs au lieu de tmp, comme - tmp suggéré. Selon le manuel, git rebase [--onto] [], newbase est tmp! Quelque chose me manque? –
MageSlayer
@mageslayer: commits ne s'est pas déplacé au-dessus de 'patches', mais en plus de' tmp'. 'newbase' est en effet' tmp'. "patches" se termine à droite commit simplement parce que, avant le 'rebase --onto', je l'ai réinitialisé au bon endroit de destination je voulais qu'il soit à. – VonC
@mageslayer: comme une "branche" dans Git est vraiment juste une étiquette à la pointe d'un chemin de graphe, vous pouvez vous sentir libre de déplacer cette étiquette ... sauf si vous avez déjà publié cette branche ('push'), ce qui signifierait un monde blessé pour quiconque tirant de votre (nouvelle) branche: tout serait à nouveau fusionné. – VonC