Réponses:
Vous pouvez créer la branche via un hachage:
git branch branchname <sha1-of-commit>
Ou en utilisant une référence symbolique:
git branch branchname HEAD~3
Pour extraire la branche lors de sa création, utilisez
git checkout -b branchname <sha1-of-commit or HEAD~3>
git push origin BRANCH_NAME
<sha1-of-commit>
exécution, git checkout -b <name-of-branch> <sha1-of-commit>
mais si la branche existe déjàgit checkout -B <name-of-branch> <sha1-of-commit>
Pour ce faire sur github.com:
La magie peut être effectuée par git reset .
Créez une nouvelle branche et passez à celle-ci (afin que toutes vos dernières validations soient stockées ici)
git checkout -b your_new_branch
Revenez à votre branche de travail précédente (supposez qu'elle est maître)
git checkout master
Supprimez les derniers commits x, gardez le maître propre
git reset --hard HEAD~x # in your case, x = 3
À partir de ce moment, toutes les dernières validations x ne se trouvent que dans la nouvelle branche, plus dans votre branche de travail précédente (maître).
git reset --hard
n'est pas une bonne idée si vous avez déjà poussé le commit à l'origine ...
git push --force
si vous aviez déjà poussé la branche avant
Si vous ne savez pas à l'avance à partir de quel commit vous souhaitez créer une branche, vous pouvez vérifier les validations et examiner leur code (voir source, compiler, tester) en
git checkout <sha1-of-commit>
une fois que vous avez trouvé le commit à partir duquel vous souhaitez créer une branche, vous pouvez le faire à partir du commit (c'est-à-dire sans revenir au maître en premier) simplement en créant une branche de la manière habituelle:
git checkout -b <branch_name>
git checkout -b <branch-name> <sha1-of-commit>
git branch branchname <sha1-of-commit>
" (de la réponse acceptée)?
git checkout -b
pour créer une nouvelle branche.
Un moyen rapide de le faire sur votre dépôt Github serait comme suit:
Exécutez simplement:
git checkout -b branch-name <commit>
Par exemple :
git checkout -b import/january-2019 1d0fa4fa9ea961182114b63976482e634a8067b8
La checkout
commande avec le paramètre -b
créera une nouvelle branche ET vous y basculera
git fetch
et git branch
commander sur le dossier de votre projet à l'aide du terminal, puis vérifier si la branche de fonctionnalité existe, si tel est le cas, alors oui, bien sûr, vous ne pourrez pas créer une branche à partir de branches supprimées, vous pouvez également annuler une suppression de branche au cas où le branche a disparu
Une grande question connexe est: comment diable pouvez-vous comprendre cela en utilisant l' --help
option de git? Essayons ça:
git branch --help
Nous voyons cette sortie:
NAME
git-branch - List, create, or delete branches
SYNOPSIS
git branch [--color[=<when>] | --no-color] [-r | -a]
[--list] [-v [--abbrev=<length> | --no-abbrev]]
[--column[=<options>] | --no-column]
[(--merged | --no-merged | --contains) [<commit>]] [--sort=<key>]
[--points-at <object>] [<pattern>...]
git branch [--set-upstream | --track | --no-track] [-l] [-f] <branchname> [<start-point>]
git branch (--set-upstream-to=<upstream> | -u <upstream>) [<branchname>]
git branch --unset-upstream [<branchname>]
git branch (-m | -M) [<oldbranch>] <newbranch>
git branch (-d | -D) [-r] <branchname>...
git branch --edit-description [<branchname>]
Gobbledegook.
Cherchez dans le texte suivant le mot "commit". Nous trouvons ceci:
<start-point>
The new branch head will point to this commit. It may be given as a branch name, a
commit-id, or a tag. If this option is omitted, the current HEAD will be used instead.
On arrive quelque part!
Maintenant, concentrez-vous sur cette ligne du gobbledegook:
git branch [--set-upstream | --track | --no-track] [-l] [-f] <branchname> [<start-point>]
Condensez à ceci:
git branch <branchname> [<start-point>]
Et.. Voila.
Pour ce faire dans Eclipse:
Cela créera une succursale locale pour vous. Ensuite, chaque fois que vous transmettez vos modifications, votre branche est transmise au serveur distant.
Vous pouvez le faire dans Stash.
J'ai pu le faire comme ça:
git branch new_branch_name `git log -n 1 --skip 3 --format=%H`
Où vous devez entrer la valeur de saut. 0 est le dernier, 1 est le précédent, 2 est le commit avant cela, etc.
HEAD~1
(où 1 spécifie 1 commit back)?
Cela crée la branche avec une seule commande:
git push origin <sha1-of-commit>:refs/heads/<branch-name>
Je préfère cette méthode mieux que celles publiées ci-dessus, car elle crée la branche immédiatement (ne nécessite pas de commande push supplémentaire par la suite).
Utilisation de Sourcetree | La manière la plus simple.
C'est ce que j'ai fait:
C:\Users\[path]\build>git checkout -b responsivenavigation 8a75b001096536b3216022484af3026aa9c7bb5b
Switched to a new branch 'responsivenavigation'
C:\Users\jaimemontoya\Dropbox\CuponClub\androidapp\build>git branch
master
* responsivenavigation
Dans ce cas, 8a75b001096536b3216022484af3026aa9c7bb5b
était et ancien commit appartenant à la master
branche.
Accédez à une validation particulière d'un référentiel git
Parfois, lorsque vous travaillez sur un référentiel git, vous souhaitez revenir à une validation (révision) spécifique pour avoir un instantané de votre projet à un moment précis. Pour ce faire, il vous suffit du hachage SHA-1 du commit que vous pouvez facilement trouver en consultant le journal avec la commande:
git log --abbrev-commit --pretty=oneline
qui vous donnera une liste compacte de tous les commits et la version courte du hachage SHA-1.
Maintenant que vous connaissez le hachage du commit auquel vous souhaitez accéder, vous pouvez utiliser l'une des 2 commandes suivantes:
git checkout HASH
ou
git reset --hard HASH
check-out
git checkout <commit> <paths>
Indique à git de remplacer l'état actuel des chemins par leur état dans la validation donnée. Les chemins peuvent être des fichiers ou des répertoires.
Si aucune branche n'est donnée, git suppose la validation HEAD.
git checkout <path> // restores path from your last commit. It is a 'filesystem-undo'.
Si aucun chemin n'est indiqué, git se déplace HEAD
vers le commit donné (changeant ainsi le commit sur lequel vous vous asseyez et travaillez).
git checkout branch //means switching branches.
réinitialiser
git reset <commit> //re-sets the current pointer to the given commit.
Si vous êtes sur une branche (vous devriez généralement l'être) HEAD
et que cette branche est déplacée pour valider.
Si vous êtes dans un HEAD
état détaché , git reset ne se déplace que HEAD
. Pour réinitialiser une branche, commencez par la vérifier.
Si vous vouliez en savoir plus sur la différence entre git reset et git checkout, je vous recommande de lire le blog officiel de git .
git log --abbrev-commit --pretty=oneline
peut être abrégé engit log --oneline
Pour les utilisateurs de Git GUI, vous pouvez visualiser tout l'historique (si nécessaire), puis cliquer avec le bouton droit sur le commit à partir duquel vous souhaitez créer une branche et entrer le nom de la branche.
Pour effectuer la réponse acceptée dans Visual Studio 2015 et 2017:
Cliquez dans les modifications (flèche rouge ci-dessus)
Cliquez sur Actions (flèche rouge ci-dessus) et cliquez sur Afficher l'historique dans le menu déroulant
Et un nouvel onglet s'ouvrira:
Et vous devez cliquer avec le bouton droit sur le commit précédent auquel vous souhaitez que votre code revienne:
Choisissez de commander une nouvelle succursale et voilá!
Ci-dessous, bien que cela ne fasse pas partie de la question OP, mais je fais beaucoup à la fois et celle-ci est une étape piège, du moins pour moi: si vous souhaitez revenir à un commit précédent, sans extraire une nouvelle branche, NE choisissez PAS revert (! ?); vous devez choisir de redéfinir --mixed ou --hard:
si vous utilisez un arbre source assez simple.
Si vous recherchez une solution basée sur la ligne de commande, vous pouvez ignorer ma réponse. Je vais vous suggérer d'utiliser GitKraken . C'est un client Git UI extraordinaire. Il montre l'arbre Git sur la page d'accueil. Vous pouvez simplement les regarder et savoir ce qui se passe avec le projet. Sélectionnez simplement un commit spécifique, faites un clic droit dessus et sélectionnez l'option 'Créer une branche ici'. Il vous donnera une zone de texte pour entrer le nom de la branche. Entrez le nom de la succursale, sélectionnez «OK» et vous êtes prêt. C'est vraiment très simple à utiliser.