私が取り組んだとしましょう:
そして私は次のコミットを持っています
私が行った間違ったことは、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ステップ前の場合)、追加の問題が発生します。同様に、ブランチ名を覚えているmaster
とdevelop
識別し、特定の1がコミットGitは呼び出す、先端はブランチのコミット。各コミットには、その親(前の)コミットのハッシュIDも含まれています。これは、Gitが最新のコミットから以前のコミットを見つける方法です。
...--D--E--F--G <-- master
\
H--I--J--K <-- develop
ここで、大文字は大きな醜いハッシュIDを表しています。名前のmaster
識別は、コミットG
:先端のをmaster
。名前develop
はK
、の先端である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に次のように伝えます。一時的な名前をdevelop
K'
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これをI
、J
し、K
それがなければならないことを忘れて(!にもおよびそれ以降のもの)、それらのコミットをして、代わりにピカピカの新しいを使用します交換。
他のユーザーが元のI-J-K
シーケンスを取得した場合は、コピーも破棄するようにユーザーを説得する必要があります。彼らが彼ら自身のコミットを上に構築した場合、あなたは彼らにあなたの輝く新しい上に彼らの古いコミットをコピーさせる必要があります。これは、他のすべてのユーザーにとってはかなりの量の作業になる可能性があるため、本当にユーザーに対してこれを実行したいことを確認してください。 I-J-K
K
K'
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加