web-dev-qa-db-ja.com

Push後にgit commitメッセージを変更する(誰もリモートから引っ張っていないことを考える)

私はgit commitとそれに続くPushを行いました。コミットメッセージを変更したいのですが。私が正しく理解しているならば、私がそのような変更をする前に誰かがリモートリポジトリから引っ張ったかもしれないのでこれはお勧めできません。誰も引っ張っていないことを私が知っていればどうなりますか?

これを行う方法はありますか?

825
K_U

歴史を変える

それが最新のコミットであれば、単純にこれを実行できます。

git commit --amend

これでエディタに最後のコミットメッセージが表示され、メッセージを編集できます。 (古いメッセージを消去して新しいメッセージを使用したい場合は、-mを使用できます。)

押す

それからあなたがプッシュするとき、これをしなさい:

git Push --force-with-lease <repository> <branch>

あるいは "+"を使うこともできます。

git Push <repository> +<branch>

あるいは--forceを使うこともできます。

git Push --force <repository> <branch>

これらのコマンドを使用するときは注意してください。

  • 他の誰かが同じブランチに変更をプッシュした場合、おそらくそれらの変更を破棄したくないでしょう。 --force-with-leaseオプションは、最も上流の変更があると中止されるので最も安全です。

  • ブランチを明示的に指定しない場合、Gitはデフォルトのプッシュ設定を使います。デフォルトのプッシュ設定が「マッチング」の場合は、同時に複数のブランチでの変更を破棄することができます。

あとで引っ張る

すでに引っ張っている人は誰でもエラーメッセージを受け取るでしょう、そして彼らは次のようなことをすることによって更新する必要があります(彼ら自身は何も変更を加えていないと仮定して)

git fetch Origin
git reset --hard Origin/master # Loses local commits

reset --hardを使用するときは注意してください。ブランチに変更があると、それらの変更は破棄されます。

履歴の変更に関するメモ

破壊されたデータは本当に古いコミットメッセージですが、--forceはそれを知らず、他のデータも喜んで削除します。 --forceは、「データを破壊したいのですが、破壊されているデータは確実にわかっています」と考えてください。しかし、破壊されたデータがコミットされると、reflogから古いコミットを回復することができます。データは実際には破壊されるのではなく、 orphaned です。

あなたがデータを破壊しているとは思わないなら、--force... 悪いことが起こるかもしれない から離れてください。

これが--force-with-leaseがやや安全である理由です。

1194
Dietrich Epp

言うだけ :

git commit --amend -m "New commit message"

その後

git Push --force
367

パーティーに遅れるかもしれない、これは私がここで見ていない答えです。

Step1 :最後に影響を受けたnコミットに対して対話的なリベースを行うためのgit rebase -i HEAD~n

gitはそれらのコミットを処理するためにエディタをポップアップします。このコマンドに注意してください:# r, reword = use commit, but edit the commit message、それはまさに我々が必要としているものです。

Step2 :msgを更新したいコミットのpickrに変更してください。エディタを保存して閉じます。

ステップ3 :以下のコミットファイルで、必要に応じてコミットメッセージを更新します。

Step4 :すべてのコミットの後、メッセージが更新されます。あなたはリモコンを更新するためにgit Push -fをすることを望むかもしれません。

188
Jinsong Li

コンソールでこれら二つのステップを使用しなさい:

git commit --amend -m "new commit message"

その後

git Push -f

完了:)

37
Abdul Rizwan

Push --forceを複数の参照と一緒に使用すると、結果としてそれらはすべて変更されます。 gitリポジトリがPush toに設定されている場所に注意を払うようにしてください。幸いなことに、更新するブランチを1つ指定することで、プロセスをわずかに保護する方法があります。 gitのmanページから読んでください。

--forceはプッシュされたすべての参照に適用されるため、Push.defaultをmatchingに設定したり、remoteで設定された複数のプッシュ宛先と共に使用したりすると、現在のブランチ以外の参照が上書きされる可能性があります。彼らの遠隔の対応物の後ろに厳密に)。プッシュを1つのブランチのみに強制するには、参照仕様の前にある+を使用してプッシュします(たとえば、Push Origin + masterと入力してプッシュをマスターブランチに強制します)。

18
Steve Benner

最後のコミットではなく、古いコミットを変更する場合は、ここで説明されているrebaseコマンドを使用する必要があります。 Githubヘルプページ古いまたは複数のコミットメッセージのメッセージを修正するセクション

11
Carlos

コマンド 1

git commit --amend -m "New and correct message"

その後、

コマンド 2

git Push Origin --force
7
Teo Choong Ping
git commit --amend

次に、現在のウィンドウのメッセージを編集してから変更します。その後する

git Push --force-with-lease
3
Beulah Sheeba

別の選択肢は、エラーを含むコミットオブジェクトを参照する追加の "errata commit"(およびPush)を作成することです - 新しいerrata commitも訂正を提供します。エラータコミットとは、実質的なコードの変更はしないが重要なコミットメッセージを含むコミットです。たとえば、readmeファイルに空白文字を1つ追加し、その変更を重要なコミットメッセージでコミットするか、gitオプション--allow-emptyを使用します。これは、リベースよりも確実に簡単で安全で、真の履歴を変更することはなく、ブランチツリーをきれいに保ちます(最新のコミットを修正する場合はamendを使用するのも良い選択ですが、errataコミットは良い選択です)。より古いコミット)このようなことが起こることはめったにありませんが、単に間違いを文書化するだけで十分です。将来、gitログで機能キーワードを検索する必要がある場合、その元のコミットで間違ったキーワードが使用されていたため(元のタイプミス)、元の(誤った)コミットが表示されない可能性があります。次に、errata commitで、タイプミスがあった元のコミットをあなたに示します。これが例です:

 $ git log 
 commit 0c28141c68adae276840f17ccd4766542c33cf1d 
作成者:First Last 
作成日:水8月8日15時55分52秒2018年-0600 
 []エラータコミット:
このコミットには実質的なコードの変更はありません
このコミットは前回のコミットメッセージの修正を文書化するためだけに提供されています
これはコミットオブジェクトに関連していますe083a7abd8元の不正確なコミットメッセージ:
背景色を赤に変更しました
訂正(*ハイライト表示*):
背景色を*青*に変更しました
 [ commit 032d0ff0601bff79bdef3c6f0a02ebfa061c4ad4 
作成者:First Last 
日付:Wed Aug 8 15:43:16 2018年-0600 
 
いくつかの中間コミットメッセージ
 ] 
 commit e083a7abd8deb5776cb304fa13731a4182a24be1 
作者:最初の最後の
日付:Wed Aug 8 13:31:32 2018 -0600 
 
背景色をに変更しました。赤
2
rob_7cc

これは私にとってはかなりうまくいきます、

git checkout由来/ブランド名

すでにブランチにいる場合は、pullまたはrebaseを実行したほうがよいでしょう。

git pull

または

git -c core.quotepath=false fetch Origin --progress --Prune

後であなたは単に使用することができます

git commit --amend -m "Your message here"

またはテキストエディタを開きたい場合は、

git commit --amend

コメントが多い場合は、テキストエディタを使用することをお勧めします。あなたはコマンドで好みのテキストエディタを設定することができます

git config --global core.editor your_preffered_editor_here

とにかく、コミットメッセージの変更が終わったら、それを保存して終了してください。

そして走る

git Push --force

そして、あなたは終わりました

1
Hasasn

あなたがbitbucketパイプラインを使っているなら同じ問題についての追加情報

メッセージを編集する

git commit --amend

断絶する

git Push --force <repository> <branch>

それから--forceをパイプラインのPushコマンドに追加します

git ftp Push --force

これにより、以前のコミットを削除して現在のコミットをプッシュします。

最初のプッシュ後に--forceを削除する

私はそれをbitbucketパイプラインで試してみました