2015-04-24 1 views
0

J'ai oublié d'ajouter des commits et des tags qui étaient censés être faits pour mon projet. Bien que, il n'y avait que des changements mineurs (dont je me souviens et que je peux faire maintenant), je veux commettre et créer un tag git. Est-il possible de tirer un commit et d'y ajouter un tag git et de le pousser?Comment ajouter des commits git et des tags pour l'histoire d'un projet

C'est tellement désordonné et je veux le réparer maintenant avant d'aller de l'avant. S'il vous plaît donnez votre avis.

Merci d'avance.

+0

Le ta g est facile; Les tags ne font pas partie des commits, ils ne font référence qu'à des commits, vous pouvez donc ajouter une balise qui pointe vers n'importe quoi à n'importe quel moment. On ne sait pas ce que vous voulez dire en ajoutant un commit. Voulez-vous modifier un commit existant, ou juste commettre plus de code? Vous devrez donner plus de détails sur votre situation exacte. – chepner

+0

Oui, je dois éditer certains fichiers et les valider, puis les marquer. Et il y a maintenant 10 commits de code au-dessus. Donc si les commits sont identifiés comme - 1, 2, 3 (c'est où je veux commettre du code), 4, 5, 6, 7 (vouloir valider le code et tag), 8, 9, 10 * (veulent commettre le code et la balise) .. Et aucun des commits de code ne modifiera/perturbera la base de code existante (je suis sûr à 100% à ce sujet). – user591410

Répondre

0

Vous pouvez le faire avec un rebasage interactif, mais soyez conscient des risques de réécriture de l'historique que vous avez déjà partagé. Commencez par rebaser avec git rebase -i <commit2>. Cela ouvrira une fenêtre d'éditeur qui ressemble à ceci:

pick 8e1729c <msg3> 
pick 5f4f4b1 <msg4> 
pick d0936bb <msg5> 
pick 652eb5c <msg6> 
pick ceebbb7 <msg7> 
pick d42a432 <msg8> 
pick e203251 <msg9> 
pick 7701829 <msg10> 

Vous modifier la première colonne dans ce dossier comme celui-ci:

edit 8e1729c <msg3> 
pick 5f4f4b1 <msg4> 
pick d0936bb <msg5> 
pick 652eb5c <msg6> 
pick ceebbb7 <msg7> 
pick d42a432 <msg8> 
pick e203251 <msg9> 
pick 7701829 <msg10> 

Enregistrez le fichier et quittez. Git lancera le rebasement en réappliquant les validations affichées, mais en s'arrêtant après le premier afin de pouvoir apporter des modifications ou simplement ajouter un commit avant de continuer. Si vous souhaitez modifier la 3e originale engagement, juste faire vos changements maintenant et continuer

git commit --amend 
git rebase --continue 

Si vous souhaitez modifier le 3 d'origine commit, « annuler » avec

git reset HEAD^ 

puis faire une les modifications que vous voulez avant de poursuivre

# stage all your changes 
git commit 
git rebase --continue 

Une fois que le rebasage il complète, vous pouvez le faire vos dernières modifications à la dernière livraison en faisant vos modifications, et modifiant commettre 10 avec

# stage changes 
git commit --amend 

Une fois vos commits sont en ordre, utiliser git log pour trouver le nouveau CSA pour les deux commits que vous voulez marquer (le rebasage et --amend auront changés!), Et il suffit de lancer

git tag <commit3hash> <tagname> 
git tag <commit10hash> <tagname> 

et pousser tout à votre télécommande

git push -f # You need to force it, since you've rewritten history 
git push --tags 
+0

Great..thanks pour la réponse détaillée. Je vais l'essayer avec soin et vous le faire savoir. – user591410

0

Comme alternative à la réécriture de l'histoire, vous pouvez faire quelques branches temporaires au point où les commits auraient dû être fait et la n les fusionner dans le maître.

Je pense que c'est un peu moins perturbant pour les autres utilisateurs (en tirant par exemple) du référentiel si les choses sont publiées, tout en attachant toujours les commits à son parent prévu.

Ne le premier commettras:

$ git checkout -b first-commit 3 
$ [do stuff] 
$ git add [stuff] 
$ git commit 

Effectuez ensuite la deuxième commettras:

$ git checkout -b second-commit 7 
$ [do stuff] 
$ git add [stuff] 
$ git commit 

Et le premier tag:

$ git tag first-tag 

fusionner ensuite les branches:

$ git checkout master 
$ git merge first-commit 
$ git merge second-commit 

et taguez:

$ git tag second-tag 

se débarrasser des branches:

$ git branch -d first-commit 
$ git branch -d second-commit 

Enfin pousser:

$ git push 
$ git push --tags 

L'histoire ressemble à quelque chose comme ceci:

            second-tag 
                 | 
1 -- 2 -- 3 -- 4 -- 5 -- 6 -- 7 -- 8 -- 9 -- 10 -- 11 -- 12 
      \     \    / /
      3' -----------------\----------------+ /
           7'--------------------+ 
           | 
          first-tag