私はgit commitとそれに続くプッシュを行いました。コミットメッセージを変更したいのですが。私が正しく理解している場合、そのような変更を行う前に誰かがリモートリポジトリからプルした可能性があるため、これはお勧めできません。誰も引っ張っていないことを知っているとどうなりますか?
これを行う方法はありますか?
私はgit commitとそれに続くプッシュを行いました。コミットメッセージを変更したいのですが。私が正しく理解している場合、そのような変更を行う前に誰かがリモートリポジトリからプルした可能性があるため、これはお勧めできません。誰も引っ張っていないことを知っているとどうなりますか?
これを行う方法はありますか?
回答:
それが最新のコミットである場合は、これを単純に行うことができます。
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から古いコミットを回復できることがよくあります。データは破棄されるのではなく、実際には孤立しています(孤立したコミットは定期的に削除されます)。
データを破壊していると思わない場合は、近づかないでください--force
... 悪いことが発生する可能性があります。
これが--force-with-lease
やや安全な理由です。
git push --force
<リポジトリ>と<枝>オプションを指定せずに、あなたの上流のセットを持っている場合は、あまりにも動作します。
<repository>
か?ですよorigin
ね? org/repo
?それともrepo
?
言うだけ :
git commit --amend -m "New commit message"
その後
git push --force
git push origin <BRANCH-NAME>
はうまくいきませんでした、私はgit push --force
受け入れられた答えで説明されているように使用する必要がありました。
git push --force
、そうでなければプッシュは通過しません。
ステップ1:影響を受けるgit rebase -i HEAD~n
最後のn
コミットに対してインタラクティブなリベースを行う。(つまり、コミットメッセージを変更したい場合は、3コミットバックしますgit rebase -i HEAD~3
)
gitはこれらのコミットを処理するエディターをポップアップします。次のコマンドに注意してください。
# r, reword = use commit, but edit the commit message
それがまさに必要です!
Step2:メッセージを更新したいコミットに変更pick
しr
ます。ここでコミットメッセージを変更しないでください。無視されます。次のステップでそれを行います。エディターを保存して閉じます。
リベースの「計画」を編集しても、ファイルの名前を変更するプロセスが開始されない場合は、次のコマンドを実行してください。
git rebase --continue
インタラクティブセッションに使用するテキストエディターを変更する場合(たとえば、デフォルトのviからnanoに)、次のコマンドを実行します。
GIT_EDITOR=nano git rebase -i HEAD~n
ステップ3:Gitは、r
以前に置いたすべてのリビジョンに対して別のエディターをポップアップします。必要に応じてコミットメッセージを更新し、保存してエディタを閉じます。
ステップ4:すべてのコミット後、メッセージが更新されます。git push -f
リモコンを更新したい場合があります。
git rebase -i HEAD~3
git rebase --continue
ます。インタラクティブセッションで使用するテキストエディタを変更する場合(デフォルトvi
からなどnano
)、を実行しGIT_EDITOR=nano git rebase -i HEAD~n
ます。
コンソールで次の2つの手順を使用します。
git commit --amend -m "new commit message"
その後
git push -f
完了:)
複数参照で使用するpush --force
と、結果としてすべてが変更されることに注意してください。git repoがpushするように構成されている場所に注意してください。幸い、更新する単一のブランチを指定することにより、プロセスをわずかに保護する方法があります。git manページから読んでください:
--forceはプッシュされるすべての参照に適用されるため、push.defaultをmatchingに設定したり、remote。*。pushで構成された複数のプッシュ宛先で使用したりすると、現在のブランチ以外の参照(ローカルの参照を含む完全にリモートの相手の背後にあります)。1つのブランチのみにプッシュを強制するには、refspecの前に+を使用してプッシュします(例:git push origin + masterはマスターブランチに強制的にプッシュします)。
古い最後のではなく、コミット変更したい場合は、使用する必要がありますrebase
ここで説明したように、コマンド、Githubのヘルプページ、上を改正高齢のメッセージまたは複数のメッセージのコミットセクションを
別のオプションは、エラーを含むコミットオブジェクトを参照する追加の「エラータコミット」(およびプッシュ)を作成することです。新しいエラータコミットも修正を提供します。エラータコミットは、実質的なコード変更はないが重要なコミットメッセージのあるコミットです。たとえば、readmeファイルにスペース文字を1つ追加し、重要なコミットメッセージでその変更をコミットするか、gitオプションを使用します--allow-empty
。それは確かにリベースより簡単で安全です、それは本当の履歴を変更せず、ブランチツリーをクリーンに保ちます(amend
最新のコミットを修正する場合にも適していますが、古いコミットにはエラッタコミットが適している場合があります)。このようなことはめったに起こらないため、間違いを文書化するだけで十分です。将来、git logで機能キーワードを検索する必要がある場合、元の(誤った)コミットは、元のコミット(元のタイプミス)で間違ったキーワードが使用されたために表示されない可能性があります-ただし、キーワードは表示されますエラータコミットでは、タイプミスがあった元のコミットが示されます。次に例を示します。
$ git log コミット0c28141c68adae276840f17ccd4766542c33cf1d 著者:最初の最後 日付:2018年8月8日水曜日15:55:52 -0600 エラータのコミット: このコミットには実質的なコードの変更はありません。 このコミットは、以前のコミットメッセージに対する修正を文書化するためにのみ提供されます。 これは、コミットオブジェクトe083a7abd8deb5776cb304fa13731a4182a24be1に関係します。 元の誤ったコミットメッセージ: 背景色を赤に変更 修正(*ハイライトされた変更*): 背景色を*青*に変更しました コミット032d0ff0601bff79bdef3c6f0a02ebfa061c4ad4 著者:最初の最後 日付:2018年8月8日水曜日15:43:16 -0600 暫定コミットメッセージ コミットe083a7abd8deb5776cb304fa13731a4182a24be1 著者:最初の最後 日付:2018年8月8日水曜日13:31:32 -0600 背景色を赤に変更
git commit -m “fixed feature A”
(gitがこれにe3ab7312のコミットIDを与えると仮定しましょう... ...(後でメッセージが正しくないことに気付いたので、readmeファイルにスペースを追加するなど、ファイルに重要でない変更を加えるか、—allow-empty
gitオプションを使用してください)。 .. git commit -m “Errata commit for previous commit e3ab7312... original message should have been ‘fixed feature *B*’
'' '
git notes
これは「エラッタコミット」と同じ目的を果たします。コミットメッセージには、単純にすべてのエラーを注釈にコミットする前のにメモを追加したり修正: https://git-scm.com/docs/git-notes
これは私にはかなりうまくいきます、
git checkout origin / branchname
すでにブランチにいる場合は、プルまたはリベースすることをお勧めします
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
これで完了です
bitbucketパイプラインを使用している場合の同じ問題の追加情報
メッセージを編集
git commit --amend
サーバーにプッシュ
git push --force <repository> <branch>
次に、パイプラインのプッシュコマンドに--forceを追加します。
git ftp push --force
これにより、以前のコミットが削除され、現在のコミットがプッシュされます。
最初のプッシュ後に--forceを削除します
私はそれをbitbucketパイプラインで試してみました