Je travaille avec un référentiel git qui a besoin d'une validation d'un autre référentiel git qui ne sait rien du premier.
En règle générale, je choisirais le cerise en utilisant le HEAD@{x}
dans le reflog, mais parce que cela .git
ne sait rien de cette entrée de reflog (répertoire physique différent), comment puis-je le choisir, ou puis-je?
J'utilise git-svn
. Ma première branche utilise git-svn
du trunk
repo Subversion, et la branche suivante utilise git-svn
une branche Subversion.
git
cherry-pick
gitcoder182
la source
la source
Réponses:
Vous devrez ajouter l'autre référentiel en tant que télécommande, puis récupérer ses modifications. De là, vous voyez le commit et vous pouvez le sélectionner.
Comme ça:
Vous avez maintenant toutes les informations à faire
git cherry-pick
.Plus d'informations sur le travail avec les télécommandes ici: https://git-scm.com/book/en/v2/Git-Basics-Working-with-Remotes
la source
--stdlayout
option de git-svn si vous utilisez la disposition standard de tronc / branches / balises dans Subversion. La branche Subversion sera alors une simple branche git distante.git am < d821j8djd2dj812.patch
. En dehors de GH, des concepts similaires pourraient être appliqués comme indiqué dans la réponse alternative ci-dessous.La réponse, comme indiqué, est d'utiliser format-patch mais comme la question était de savoir comment choisir à partir d'un autre dossier, voici un morceau de code pour le faire:
la source
git format-patch
commande crée un patch à partirsome_other_repo
du commit spécifié par son SHA (-1
pour un seul commit seul). Ce correctif est canaliségit am
, ce qui applique le correctif localement (-3
signifie essayer la fusion à trois si le correctif ne s'applique pas proprement). J'espère que cela explique.--ignore-whitespace
. Commande complète:git --git-dir=../<some_other_repo>/.git format-patch -k -1 --stdout <commit SHA> | git am -3 -k --ignore-whitespace
Voici un exemple de fusion-extraction à distance.
Ensuite vous pouvez:
ou vous pouvez même fusionner toute la branche
la source
git merge projectB/master
est très, très mal , parce que vous n'êtes pas appliquer les modifications d'un seul commit (comme une écrémer serait), vousfusionner dans tous les changements dansprojectB/master
qui ne figurent pas dans votre propremaster
branche.git remote rm projectB
. Utilisez également cette optiongit tag -d tag-name
pour supprimer les balises récupérées dans le référentiel distant. Les validations à distance n'apparaîtront plus dans votre historique et l'élagage les supprimera éventuellement du stockage.Vous pouvez le faire, mais cela nécessite deux étapes. Voici comment:
Remplacez
<remote-git-url>
par l'URL ou le chemin d'accès au référentiel à partir duquel vous souhaitez choisir.Remplacez-le
<branch>
par le nom de la branche ou de la balise que vous souhaitez sélectionner dans le référentiel distant.Vous pouvez remplacer
FETCH_HEAD
par un git SHA de la branche.Mise à jour: modifiée sur la base des commentaires de @ pkalinow.
la source
git fetch <repo-url> <branch> && git cherry-pick <sha>
.Voici les étapes pour ajouter une télécommande, récupérer des branches et sélectionner un commit
Source: https://coderwall.com/p/sgpksw
la source
Voir Comment créer et appliquer un patch avec Git . (D'après le libellé de votre question, j'ai supposé que cet autre référentiel est pour une base de code entièrement différente. S'il s'agit d'un référentiel pour la même base de code, vous devez l'ajouter en tant que télécommande comme suggéré par @CharlesB. Même si c'est pour un autre base de code, je suppose que vous pouvez toujours l'ajouter en tant que télécommande, mais vous ne voudrez peut-être pas obtenir la branche entière dans votre référentiel ...)
la source
Vous pouvez le faire sur une seule ligne comme suit. J'espère que vous êtes dans le référentiel git qui a besoin du changement choisi et que vous avez vérifié pour corriger la branche.
git fetch [URL de branche] [Branche vers laquelle choisir depuis] && git cherry-pick [ID de validation]
la source
ssh://
pièce, seulement pourhttps://
Oui. Récupérez le référentiel, puis sélectionnez-le dans la branche distante.
la source
En supposant
A
est le repo que vous voulez cerise choisir, etB
est celui que vous voulez écrémer le , vous pouvez le faire en ajoutant</path/to/repo/A/>/.git/objects
à</path/to/repo/B>/.git/objects/info/alternates
. Créez cesalternates
fichiers s'il n'existe pas.Cela permettra au repo B d'accéder à tous les objets git du repo A, et fera fonctionner la sélection de cerises pour vous.
la source
Ma situation était que j'avais un repo nu vers lequel l'équipe poussait, et un clone de celui assis juste à côté. Cet ensemble de lignes dans un Makefile fonctionne correctement pour moi:
En gardant le maître du repo nu à jour, nous sommes en mesure de choisir un changement proposé publié sur le repo nu. Nous avons également un moyen (plus compliqué) de sélectionner plusieurs braches pour un examen et des tests consolidés.
Si "ne sait rien" signifie "ne peut pas être utilisé comme une télécommande", alors cela n'aide pas, mais cette question SO est venue alors que je cherchais pour trouver ce flux de travail, alors j'ai pensé que je contribuerais en retour.
la source
Si vous souhaitez sélectionner plusieurs validations pour un fichier donné jusqu'à ce que vous atteigniez une validation donnée, utilisez ce qui suit.
la source