2396 votes

Changer l’auteur d’une validation dans Git

<p>J’ai écrit un script simple dans l’ordinateur de l’école et approuver les modifications apportées à Git (dans un repo qui était dans ma clé USB, cloné à partir de mon ordinateur à la maison). Après plusieurs validations j’ai réalisé que je m’engage des trucs comme l’utilisateur root.</p> <p>Est-il possible de changer l’auteur de ces validations à mon nom ?</p>

1577voto

asmeurer Points 13185

Vous pourriez faire

git rebase -i -p <some HEAD before all of your bad commits>

Ensuite, marquer tous vos mauvais s'engage en tant que "edit" dans le rebase fichier, et quand git vous demande de modifier chaque commit, ne

 git commit --amend --author "New Author Name <email@address.com>" 

modifier ou tout simplement fermer la fenêtre qui s'ouvre, puis faire

git rebase --continue

pour continuer le rebase.

Je ne sais pas si il est plus simple façon de faire cela avec plusieurs commits.

EDIT 1:

Comme certains commentateurs l'ont noté, si vous voulez juste changer la plus récente de la validation, la commande rebase n'est pas nécessaire. Il suffit de ne

 git commit --amend --author "New Author Name <email@address.com>"

EDIT 2:

Je viens de réaliser qu'il y a une légère faille dans ma réponse initiale. Si il y a tout de fusion s'engage entre le courant HEAD et votre <some HEAD before all your bad commits>, alors git rebase aplatissent eux (et par la manière, si vous utilisez GitHub pull requests, il va y avoir une tonne de fusion s'engage dans ton histoire). Ce qui peut souvent conduire à des résultats très différents de l'histoire (en double, des changements peuvent être "relocalisée"), et dans le pire des cas, elle peut conduire à des git rebase vous demandant de résoudre des situations difficiles conflits de fusion (qui étaient probablement déjà résolu dans la fusion s'engage). La solution est d'utiliser l' -p le drapeau en git rebase, ce qui permettra de préserver la fusion de la structure de votre histoire. La page de manuel pour git rebase avertit que l'utilisation d' -p et -i peut entraîner des problèmes, mais dans l' BUGS l'article il est dit "d'Édition s'engage et en reformulant leurs messages de validation devrait fonctionner correctement."

J'ai ajouté -p à la commande ci-dessus. Pour le cas où vous êtes simplement en changeant la plus récente commit (mon EDIT 1 ci-dessus), ce n'est pas un problème.

Note supplémentaire:

Vous pouvez passer de l'ouverture de l'éditeur de complètement ici en ajoutant -F .git/rebase-merge/message de sorte que la commande sera:

git commit --amend --author "New Author Name <email@address.com>" \
-F .git/rebase-merge/message && \
git rebase --continue

1217voto

Pat Notz Points 46841

Changer le nom de l'auteur (à valider) aurait besoin de ré-écrire toute l'histoire. Si vous êtes d'accord avec ça et que ça vaut la peine, alors vous devriez vérifier git filter-branch. La page de man comprend plusieurs exemples pour vous aider à démarrer. Notez également que vous pouvez utiliser des variables d'environnement pour changer le nom de l'auteur, à valider, des dates, etc. -- voir les "Variables d'Environnement", la section de l' git page de man.

588voto

Rognon Points 4395
<p>Vous pouvez également faire :<pre class="lang-bash prettyprint-override"><code></code></pre><p>Noter que si vous utilisez cette commande à l’invite de commande Windows, alors vous devrez utiliser <code></code> au lieu de <code></code> :</p><pre class="lang-bash prettyprint-override"><code></code></pre></p>

559voto

Brian Gianforcaro Points 11985
<p>Un paquebot, mais soyez prudent si vous avez un référentiel multi-utilisateurs--cela va changer <em>toutes</em> les validations pour avoir le même auteur (nouveau) et commmitter.<pre><code></code></pre><p>Avec sauts de ligne dans la chaîne (ce qui est possible en bash) :</p><pre class="lang-bash prettyprint-override"><code></code></pre></p>

187voto

blueyed Points 7719
<p>Pour une validation unique :<pre class="lang-bash prettyprint-override"><code></code></pre><p>(extrait de la réponse du asmeurer)</p></p>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X