Git:HEAD ^^コミットのコンテンツ(コミットメッセージではない)を変更する方法

zhihuifan

私が取り組んだとしましょう:

  • 機能1:file1 + file3
  • 機能2:file2

そして私は次のコミットを持っています

  • コミット2:機能2が完了しました。
  • コミット1:機能1が完了しました。

私が行った間違ったことは、file3をコミット1に追加するのを忘れたことです。file3の変更をコミット1に追加するにはどうすればよいですか?

これの1つの方法は次のとおりです。

git reset --soft Commit 1
git add file3
git commit --amend 
git add file2
git commit -m "feature 2 completed"

実際、コミット2だけでなく、コミット3,4,5,6 ...もある可能性があるため、この方法は必要ありません。

これを行う他の簡単な方法はありますか?

ありがとう

火曜日

技術的には、あなたが変更することはできませんいずれかがコミット。それさえgit commit --amendしません。各コミットは、ハッシュIDによって一意に識別されることに注意してください。

あなたができることは、いくつかの既存のコミットを取り、それを抽出し、それを使用して、元のコミットほぼ同じであるが、欠陥があると思われるものが何であれ、修正された新しい異なるコミットを構築することです。次に、すべての人(自分自身とコミットのクローンを作成した人)に、古い欠陥のあるコミットの使用をやめ、代わりに光沢のある新しいコミットを使用するように説得する必要があります。新しいコミットには、新しい異なるハッシュIDがあります。

光沢のある新しいコミットがブランチの先端にない場合(たとえば、この場合のように2ステップ前の場合)、追加の問題が発生します。同様に、ブランチ名を覚えているmasterdevelop識別し、特定の1がコミットGitは呼び出す、先端はブランチのコミット。各コミットには、その(前の)コミットのハッシュIDも含まれています。これは、Gitが最新のコミットから以前のコミットを見つける方法です。

...--D--E--F--G   <-- master
         \
          H--I--J--K   <-- develop

ここで、大文字は大きな醜いハッシュIDを表しています。名前のmaster識別は、コミットG先端のをmaster名前developK、の先端であるcommitを識別しdevelopます。コミットからはG、Gitはと逆方向に働くことができF、そしてE、そのために。からK、Gitはに逆方向に動作しJ、最終的にはにE、というように動作します。

コミットに問題がある場合I、あなたは、ISがコミットGitの抽出液を持っているものを行うことができI、(他のコミットのために、あなたはどうしたら同じように)インデックスと作業ツリーペアにいくつかの変更を行い、次に作る新しいcommit-をI'それがの代わりであることを示すためにそれ呼び出しましょう—そのI親はの親と同じIです:

...--D--E--F--G   <-- master
         \
          H--I--J--K   <-- develop
           \
            I'  <-- temporary

それが済んだら、GitJを光沢のある新しいものにコピーする必要があります。J'その親はでI'あり、その効果I'は次Jの効果と同じIです。

...--D--E--F--G   <-- master
         \
          H--I--J--K   <-- develop
           \
            I'-J'  <-- temporary

今、私たちはK作るためのトリックを繰り返しますK'

...--D--E--F--G   <-- master
         \
          H--I--J--K   <-- develop
           \
            I'-J'-K'   <-- temporary

最後に、Gitに次のように伝えます。一時的な名前をdevelopK'K削除します名前に、厄介な古いものではなく、光沢のある新しいコミットを識別させます。これは私たちに与えます:

...--D--E--F--G   <-- master
         \
          H--I--J--K   [abandoned]
           \
            I'-J'-K'   <-- develop

放棄されたブランチの描画を停止すると、3つのコミットを変更したように見えます。しかし、そうではありません。新しいコミットには、新しい異なるハッシュIDがあります。

...--D--E--F--G   <-- master
         \
          H--I'-J'-K'  <-- develop

これが何をするかgit rebase -iです。大変な作業のように聞こえますが、場合によってはそうなることもありますが、通常git rebase -iは簡単で痛みがありません

あなたがプッシュしている場合は、その注意develop他の場所で、あなたが今しなければならない強制コミットを受信した他のGitを伝えるために、開発の新しい-pushこれをIJし、Kそれがなければならないことを忘れて(!にもおよびそれ以降のもの)、それらのコミットをして、代わりにピカピカの新しいを使用します交換。

他のユーザーが元のI-J-Kシーケンスを取得した場合はコピーも破棄するようにユーザーを説得する必要があります。彼らが彼ら自身のコミットを上に構築した場合、あなたは彼らにあなたの輝く新しい上に彼らの古いコミットをコピーさせる必要がありますこれは、他のすべてのユーザーにとってはかなりの量の作業になる可能性があるため、本当にユーザーに対してこれを実行したいことを確認してください。 I-J-KKK'

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Gitの古いコミットメッセージを変更する

分類Dev

GITコミットでコメントを解析する方法は?

分類Dev

HEADコミットIDを表示するGitコマンド?

分類Dev

Gitで、ブランチへの強制プッシュが許可されていない場合にリモートコミットメッセージを変更する方法

分類Dev

gitが特定のローカル変更のセットをコミットしないようにする方法

分類Dev

変更をコミットせずに進行中のGitマージを終了する(中止しない)方法は?

分類Dev

なぜgitはプル後のマージコミットメッセージを要求するのですか?

分類Dev

Git:マスターでステージングされていない/コミットされていない変更からブランチを作成する

分類Dev

git:コミットテンプレートに最後のコミットのメッセージを表示する

分類Dev

コミットメッセージを重要なトラッカーストーリーにコメントとして送信するためのgitフックを追加するにはどうすればよいですか?

分類Dev

特定のコミットのコミットメッセージをgitで出力する

分類Dev

特定のコミットのコミットメッセージをgitで出力する

分類Dev

特定のコミットのコミットメッセージをgitで出力する

分類Dev

リベースを使用してGITの非常に古いコミットのリモートコミットメッセージを変更するにはどうすればよいですか?

分類Dev

$ git commit--コミットメッセージを変更/保存しないように修正します

分類Dev

デタッチされたHEADの変更をgitの新しいブランチにコミットする方法

分類Dev

2つのgitブランチのワーキングセット(コミットではない)の違いを取得する方法

分類Dev

特定の単語のGitコミット差分またはコンテンツをgrepする方法は?

分類Dev

gitで特定の変更をコミットする方法

分類Dev

Gitを使用すると、ステージングされていない変更をコミットできます

分類Dev

gitを使用して、24時間にわたるコミット済み+ステージングされていないLOCの変更を計算する

分類Dev

Visual Studio 2017のGitで「ステージングされていない場合、コミット時にステージングされていない変更を自動ステージングする」機能を無効にする方法はありますか?

分類Dev

Git で古いコミットを変更または削除する方法は?

分類Dev

特定のコミットではなく、サブモジュールの初期化をHEADにGitします

分類Dev

コミットメッセージでGitリポジトリを検索する方法は?

分類Dev

gitで長いコミットメッセージを書く?

分類Dev

git-段階的な変更を別のブランチにコミットしてマージする

分類Dev

Gitでリモートにプッシュされた後にコミットメッセージを変更する方法

分類Dev

git:あるリモートブランチに変更を追加してコミットするが、別のブランチにはコミットしない方法は?

Related 関連記事

  1. 1

    Gitの古いコミットメッセージを変更する

  2. 2

    GITコミットでコメントを解析する方法は?

  3. 3

    HEADコミットIDを表示するGitコマンド?

  4. 4

    Gitで、ブランチへの強制プッシュが許可されていない場合にリモートコミットメッセージを変更する方法

  5. 5

    gitが特定のローカル変更のセットをコミットしないようにする方法

  6. 6

    変更をコミットせずに進行中のGitマージを終了する(中止しない)方法は?

  7. 7

    なぜgitはプル後のマージコミットメッセージを要求するのですか?

  8. 8

    Git:マスターでステージングされていない/コミットされていない変更からブランチを作成する

  9. 9

    git:コミットテンプレートに最後のコミットのメッセージを表示する

  10. 10

    コミットメッセージを重要なトラッカーストーリーにコメントとして送信するためのgitフックを追加するにはどうすればよいですか?

  11. 11

    特定のコミットのコミットメッセージをgitで出力する

  12. 12

    特定のコミットのコミットメッセージをgitで出力する

  13. 13

    特定のコミットのコミットメッセージをgitで出力する

  14. 14

    リベースを使用してGITの非常に古いコミットのリモートコミットメッセージを変更するにはどうすればよいですか?

  15. 15

    $ git commit--コミットメッセージを変更/保存しないように修正します

  16. 16

    デタッチされたHEADの変更をgitの新しいブランチにコミットする方法

  17. 17

    2つのgitブランチのワーキングセット(コミットではない)の違いを取得する方法

  18. 18

    特定の単語のGitコミット差分またはコンテンツをgrepする方法は?

  19. 19

    gitで特定の変更をコミットする方法

  20. 20

    Gitを使用すると、ステージングされていない変更をコミットできます

  21. 21

    gitを使用して、24時間にわたるコミット済み+ステージングされていないLOCの変更を計算する

  22. 22

    Visual Studio 2017のGitで「ステージングされていない場合、コミット時にステージングされていない変更を自動ステージングする」機能を無効にする方法はありますか?

  23. 23

    Git で古いコミットを変更または削除する方法は?

  24. 24

    特定のコミットではなく、サブモジュールの初期化をHEADにGitします

  25. 25

    コミットメッセージでGitリポジトリを検索する方法は?

  26. 26

    gitで長いコミットメッセージを書く?

  27. 27

    git-段階的な変更を別のブランチにコミットしてマージする

  28. 28

    Gitでリモートにプッシュされた後にコミットメッセージを変更する方法

  29. 29

    git:あるリモートブランチに変更を追加してコミットするが、別のブランチにはコミットしない方法は?

ホットタグ

アーカイブ