0
votes

GIT - Comment supprimer les engagements sur une branche principale à distance

Je suis nouveau à git et j'essaie de m'envoyer la tête autour de ses concepts. En conséquence, j'ai des questions de base. S'il vous plaît pardonner ma naïveté. J'ai cherché Internet mais a fini par devenir plus confus. Voici mes questions: -

$ git log -n 10 --oneline
170daa2 (HEAD -> master, origin/master, origin/HEAD) Revert "Undo Pull request from feature branch test"
e3f0714 Revert pull request test This reverts commit c6b3b1a
c6b3b1a Revert commit
b72e92e Undo Pull request from feature branch test
3077d10 (origin/feature/test1, feature/test1) First commit
1ba77e8 Updated test1
8fceee2 Revert Commit 1
ecddd63 Test for remote status
6c5a094 Cherry Pick 1
3b66732 Fixed conflict

$ git log -n 6 --oneline feature/test1
3077d10 (origin/feature/test1, feature/test1) First commit
1ba77e8 Updated test1
8fceee2 Revert Commit 1
ecddd63 Test for remote status
6c5a094 Cherry Pick 1
3b66732 Fixed conflict
  • comme vu d'en haut, lorsque je fais Git journal code> tout en étant sur le maître branche code> (première sortie ci-dessus) Pourquoi cela montre-t-il aussi commet mon Fonctionnalité Code> Branche ( Feature / Test1 Code>) Avec ceux de mon maître? Quand j'ai explicitement spécifié le branche dans le journal git, il montre alors les commits relatifs à cela branche seulement, non? Est-ce parce que git code> montrera tous les engagements (indépendamment de toute branche) combinée ensemble dans l'ordre chronologique ? Quelqu'un peut-il s'il vous plaît expliquer? P> LI>

  • Comment supprimer de commettre une télécommande code> code> forte> branche? -
    Supposons que j'ai faite 2 code> commits code> sur fonction code> branche et fusionné sur maître distant code> via une traction demande.
    Maintenant, je me rends compte que ce sont mauvais comme des commits et je veux nettoyer et retour à l'état où mon maître distant (et le Les branches maître locales étaient avant l'approbation de la demande de traction. je sais que je pourrais utiliser: GIT RESET - HEAD ~ 2 CODE>
    Pour vous débarrasser de ces 2 commits sur le maître local code> code> branche, mais comment puis-je m'en débarrasser de la distante forte> maître fort> une branche depuis qu'ils ont déjà été fusionnés à maîtriser? Est-ce que réinitialiser code> est utilisé pour les engagements locaux tandis que revenir code> est utilisé pour les engagements distants? Quelle est la différence entre ces 2 commandes? et comment résoudre ma question - p>

    • faire, j'ai besoin d'abord réinitialiser code> maître localement, puis "forcer la poussée" Cet état à la maîtrise distante en exécutant: git push origine + maître code>? Est-ce une approche correcte? Ou li>
    • Est-ce que j'utilise git revert -m 1 code> pour annuler comme branche distante avec la mise en garde que le retournement retournera et faire un nouveau commit. Y a-t-il un moyen de retourner sur les deux distants et branche principale locale sans faire de nouvelles commentations? S'il te plaît Suggérez la meilleure approche. LI> ul> blockQuote> blockQuote> li> ul>

      Depuis que je commence à commencer avec Git, il peut être possible que j'ai posé une mauvaise question. De toute façon, veuillez excuser ma naïveté. Toute aide est appréciée. P> p>


4 commentaires

S'il vous plaît pouvez-vous spécifier exactement ce que vous voulez faire? Je veux dire dans l'exemple que vous avez fourni, que voulez-vous atteindre exactement? CZ U a posé une question générale et si vous posez une question générale, vous obtiendrez une réponse générale, et si vous êtes débutant, je ne pense pas que la réponse générale vous aidera. Donc, si vous pouvez particulariser votre question et spécifier votre objectif, ce serait génial.


Voici votre réponse Buddy: Stackoverflow.com/Questtions/7099833/...


@ Alan- Mon maître distant a été fusionné avec de mauvais commits de ma branche de fonctionnalité par une demande de traction. Comment puis-je revenir au Master distant à son état précédent .. Les engagements dans l'exemple sont peu nombreux commits au hasard, j'ai fait des tests.


Si vous souhaitez supprimer commet une branche distante, vous avez répondu à vous-même vous-même, juste git reset --hard et git push -force si vous êtes sur la même branche


3 Réponses :


0
votes
git revert -m 1 <commit-hash> 
git push -u origin master
the -m 1 is needed because your commit is actually lives on 2 diffrent branches (master and feature/test1) once you merged it. So you need to tell git what directions to choose when reverting the commit.

2 commentaires

Lequel entre git reset --hard && git push --force ou git revert -m 1 && git push -u origine maître ? Si j'utilise, il est toujours nécessaire de faire git reset --hard pour local, non?


N'utilisez pas --force. Juste pas. Git Revert devrait être votre choix



0
votes

OK pour répondre brièvement à votre question et simplement:

Si vous souhaitez corriger une erreur effectuée sur la branche distante, procédez comme suit:

1) Checkout localement à la succursale que vous souhaitez appuyer sur Master, il s'agit essentiellement de la succursale Master en utilisant:

GIT Checkout Master

2) Git journal --Oneeline

Pour vérifier tous vos engagements (je sais que vous savez que)

3) Inspectez et trouvez la dernière commission que vous souhaitez que votre branche principale pointe sur

4) Après avoir trouvé le commit de hachage, procédez comme suit:

`GIT RESET --HARD

5) Vous devez maintenant forcer à pousser à la branche principale

Assurez-vous que vous êtes toujours vérifié sur Master et:

git push --force

et voila, vous avez terminé! Cependant, assurez-vous simplement que si certains autres gars retiraient à nouveau de Master, ils doivent Git Tirez-le --rebase ou sinon leur Git Tirez échouera si elles étaient déjà sur l'ancien référentiel.


8 commentaires

Merci pour votre réponse. Pourriez-vous également préciser pourquoi Git Journal sur la branche principale affiche également les engagements de ma branche de fonctionnalité en plus des commits de la branche principale ??


Tout d'abord, vous devez comprendre quelle branche est. Une succursale est en fait une série de commits, où la tête pointe vers une commission spécifique. Donc, pour répondre à votre question, ils montrent sûrement parce que vous avez vérifié la branche de fonctionnalité de la branche principale.


Ce qui signifie que, si vous avez un maître de succursale composé de trois commits A, B et C et que vous décidez de vérifier une branche de fonctionnalité de la succursale principale en ce moment, votre agence de fonctionnalité aura également les trois commises A, B et C. Donc, en ce moment, ils sont les mêmes.


Une fois que vous avez commencé à vous engager sur la branche Fonction, vous décidez par exemple de faire quelques modifications, puis de vous engager votre comité d, votre branche de fonctionnalité disposera d'une branche B et C. B et C.


C'est donc ce qui s'est passé exactement dans votre cas, vous cédez à partir d'une branche principale vers une succursale et que vous voyez A, B et C dans votre branche de fonctionnalité, car ils viennent de la branche principale.


Vous devez comprendre quelque chose, qu'un commit n'est rien d'autre que des changées, vous ne pouvez pas porter cela, vous ne pouvez pas vous commettre et me le donner et me dire que je vérifie ce que j'ai fait, car je n'ai pas votre histoire précédente à partir de laquelle Ce commit a été créé.


J'aimerais également expliquer quelque chose lorsque vous rebasez, une fois que vous avez rebasé ou modifiez votre historique de validation, vous ne modifiez pas les commits elle-même, vous modifiez uniquement l'historique de validation. Par exemple, vous décidez de votre branche principale pour modifier COMMITE B, par exemple, vous voulez changer le nom que vous avez donné à ce fait, bien dans ce cas, en tant que débutant, vous penserez que vous n'avez changé que le nom, bien ce problème, car En modifiant le nom de validation, vous modifiez également le GIGIT HASH de B, alors il s'agit maintenant de B ', et étant donné que c dépends sur B, alors c ne resterez pas c, il deviendra c'


et le témoin de validation de C changé également, alors la branche principale devient A, B 'et C'



0
votes

Si vous devez supprimer le commit (Bad Code ou autre), vous revenez simplement à la validation juste avant puis copiez le hachage (SHA-COMMIT):

1) GIT RESET --HARD SHA-COMMIT

2) git reset --soft tête @ {1}

3) Ce message de validation est un exemple libre de la modifier:

GIT COMMT -M "revenant à l'état du projet à SHA-COMMIT"

4) GIT Push Origor Master

Maintenant, votre dernier commit dans la branche principale est sur le COMMIS, vous choisissez


2 commentaires

Je ne pense pas que cela fonctionnera comme prévu, car les mauvais commits ont déjà été poussés au maître distant. Corrigez-moi si j'ai tort, s'il-vous plait


C'est la solution pour le mauvais commit déjà poussé dans le maître