11
votes

Direction générale de Git Newbie - Comment inverser?

Je ne sais pas si tel est un moyen approprié de travailler avec des branches.

  • J'ai eu cette application sur la structure a.
  • J'ai créé une branche Z pendant que j'étais sur cette structure A (mais je me suis maintenu sur la branche principale qui travaille).
  • En travaillant (sur la branche principale), j'ai changé cette structure et je finis par gâcher tout le monde. :)
  • Je n'ai jamais commis ni ajouté ces nouveaux fichiers au représentant.

    Demande:

    • Je dois revenir à la structure existant sur la dernière commission. Rétablir tous les modifications non engagées et supprimer également de nouveaux fichiers et dossiers pouvant avoir été ajoutés.

      Comment cela peut-il être fait?


0 commentaires

3 Réponses :


14
votes

Si vous avez créé une branche distincte qui a été gâchée, tout ce que vous avez à faire est de passer à celui que vous étiez auparavant: de la commande git a (supposant A est le nom de la succursale que vous étiez sur ... ou peut-être que c'est maître ).

Vous pouvez supprimer la branche Bad plus tard, si vous le souhaitez, avec Git Branch -d et peut-être lancer dans un -f aussi, s'il n'y a pas non mérité commettre.

edit: Si votre référentiel contient beaucoup de mauvaises modifications que vous souhaitez supprimer, vous pouvez utiliser git reset --hard tête pour les annuler. S'il y a de nouveaux fichiers (non suivis par Git), git clean -fd les supprimera tous. Évidemment, utilisez avec la discrétion car ils ne seront pas recouvrés par Git.


8 commentaires

@Dan: Quand j'ai créé la nouvelle branche, je crois, je n'ai pas été basculé sur cette branche automatiquement. Après avoir créé la branche, je travaille toujours sur ma branche principale que je suppose. Il semble que cela vient de prendre un instantané. Donc, ma branche principale est gâchée. Je veux appliquer la structure qui se trouve sur mon autre branche, dans la branche principale. BTW, devrions-nous éviter de travailler directement sur notre branche principale?


@MEM - Y a-t-il mal comme Maître? Sinon, alors lors de la maîtrise, git reset --hard annulera des modifications non engagées. Si vous avez commis de mauvais commits, utilisez git revert pour les annuler. Une fois que le maître est revenu à un "bon" état, vous pouvez git fusionner un lors de la maîtrise qui corrige avec espoir des choses. Si vous ne savez pas où le mauvais commit était, regardez dans Git Bisect - très cool.


@Dan - j'ai fait GIT RESET - mais je vois des fichiers créés (et non engagés) après la création de la succursale. Peut-être que je devrais faire autre chose?


@MEM - Avez-vous besoin de ces fichiers? S'ils n'étaient jamais en git, ils ne sont pas nécessaires, supprimez-les simplement de votre système de fichiers. Nous ne pouvons pas être sur la même page de l'état de votre référentiel. Peut-être mettre à jour votre message avec certaines sorties de l'état de git / branche / etc.


Eh bien, cette question est morte je crois. :( Je finis par résoudre ce problème en utilisant une option NetBeans: "rétablir toutes les modifications non engagées dans l'arbre de travail et l'index" et j'ai également cliquez sur: "Supprimer également de nouveaux fichiers et dossiers". Avec cela, je l'ai bien compris. Mais Je ne sais pas, si cela correspond à une commande git. Lorsque j'ai réinitialisé GIT, pas de fichiers ni de dossiers qui ont changé. Lorsque je choisis ces options, ces fichiers comme des dossiers étaient également partis. Alors NetBeans OptitiSn ne sont pas = Pour, Git Reset --hard. Je ne sais toujours pas comment revenir. Je peux donner le statut mais je pense que cela n'est pas utile sur cet état. Ainsi, NVM.


@MEM I juste essayé git clean -fd et qui supprimera tous les fichiers non traqués. Je ne sais pas si Netbeans utilise cette commande ou le fait-il manuellement, mais pour une référence future, y a-t-il.


Joli! Oui, peut-être que NetBeans utilise cela. Ne peut pas être sûr. Par des fichiers non traqués que vous voulez dire, non engagé ou non ajouté de fichiers? - BTW, veuillez éditer votre question en conséquence, sinon cela n'aura pas de sens aux autres.


@MEM - Oui, les fichiers qui ne sont pas dans Git, qui incluent des nouveaux non encore engagés, ainsi que tout dans votre fichier .gitignore. Je vais ajouter cela à ma réponse et vous voudrez peut-être modifier la question pour utiliser une terminologie mise à jour afin que d'autres utilisateurs ayant des situations similaires puissent le trouver.



3
votes

Je pense que vous ne créé la branche avec:

git checkout Z
git reset --soft HEAD^
git checkout master
git commit -m "blah blah"


2 commentaires

S'il vous plaît gardez votre réponse car il contient des notions importantes que je dois comprendre. Cela n'a pas fonctionné. Ce dont j'ai besoin est de: saisir la branche z et placez-la comme un maître - est-ce possible?


Merci beaucoup magnus. Désolé pour tout ce gâchis. :( Je finis par réaliser que je ne savais pas ce que je cherchais dans le jargon Git. Désolé encore.



5
votes

J'ai besoin d'inverser pour structurer un "instantané" sur la branche Z xxx

en anglais:

Supprimer votre succursale "Z" et rééparez-la de l'état actuel de "A".

Réinitialiser votre Une succursale en arrière trois commits. C'est un exemple - trois n'est probablement pas la bonne profondeur de votre histoire à réinitialiser. Changez ce numéro pour être le bon numéro (et utiliser Git journal pour déterminer que le nombre de commits de vos branches a divergé).

Basculer sur votre branche Z et confirmez que Vos changements autrefois dans "A" sont maintenant dans "Z".


1 commentaires

Désolée de vous avoir fait perdre votre temps. En effet j'ai eu une mauvaise question. Pourtant, si cela ne vous dérange pas, veuillez ne pas supprimer votre réponse car elle est sûre.