2013-02-02 5 views
1

Disons que je 3 git engage:git Solution commit

  1. livrez des changements sur la barre latérale
  2. Valider les modifications sur le pied de page
  3. livrez des changements sur la tête

permet maintenant suppose que je suis allé à travers l'éveil spirituel et réalisé que seuls les changements dont j'ai besoin est sur l'en-tête et l'un de la barre latérale, le pied de page était bien et n'avait pas besoin d'être changé.

Y a-t-il une commande qui ferait ce qui suit?:

  • fusion commit # 3 moins commit # 2
  • supprimer engager # 2
  • fusion commit # 3 plus commit # 1

(ou toute autre méthode qui fait engager # 2 comme cela n'est jamais arrivé).

Répondre

1

Vous pouvez toujours annuler les modifications à partir d'une seule validation à l'aide de git-revert.

Étant donné une ou plusieurs validations existantes, annulez les modifications introduites par les correctifs associés et enregistrez de nouvelles validations qui les enregistrent. Cela nécessite que votre arbre de travail soit propre (pas de modifications de la part de HEAD commit).

Remarque: git revert est utilisé pour enregistrer de nouveaux validations afin d'inverser l'effet de certains validations antérieures (souvent seulement un commit défectueux). Si vous souhaitez supprimer toutes les modifications non validées dans votre répertoire de travail, vous devriez voir git-reset(1), en particulier l'option --hard. Si vous souhaitez extraire des fichiers spécifiques comme ils étaient dans un autre commit, vous devriez voir git-checkout(1), plus précisément le git checkout <commit> -- <filename> syntax. Faites attention avec ces alternatives car les deux annuleront les modifications non validées dans votre répertoire de travail.

Alors:

git revert <commit-id-of-footer-changes> 
2

rebasage Interactive vous permet de modifier, réorganiser, fusionner commits, modifier les messages et plus:

git rebase --interactive 

citant l'aide:

# Commands: 
# p, pick = use commit 
# r, reword = use commit, but edit the commit message 
# e, edit = use commit, but stop for amending 
# s, squash = use commit, but meld into previous commit 
# f, fixup = like "squash", but discard this commit's log message 
# x, exec = run command (the rest of the line) using shell 
# 
# If you remove a line here THAT COMMIT WILL BE LOST. 
# However, if you remove everything, the rebase will be aborted. 
# 

Perdre la validation est ce que vous voulez.

1

Vous pouvez utiliser cherry-pick pour fusionner dans les validations souhaitées, puis revert la branche de développement à valider avant le changement de pied de page.

git checkout branch_to_merge_into 
git cherry-pick commit#1 commit#3