これは、多くのシナリオでは悪い考えであると私は理解します。私はGitを勉強して実験しています。この練習では、コードは損なわれません。Gitでコミットメッセージの名前を変更するには?
私はこのような構造を作成しました:
* [cf0149e] (HEAD, branch_2) more editing
* [8fcc106] some edit
|
| * [59e643e] (branch_2b) branch 2b
|/
|/
| * [0f4c880] (branch_2_a) branch 2a
|/
|/
* [a74eb2a] checkout 1
* [9a8dd6a] added branch_2 line
|
|
| * [bb903de] (branch_3) branch 3
|/
|
| * [674e08c] (branch_1) commit 1
| * [7d3db01] added branch_1 line
|/
* [328454f] (0.0.0) test
は今、私はこのグラフを通過し、彼らが意味をなすように、様々なコミットの名前を変更したいです。例えば
:
[cf0149e] (HEAD, branch_2) more editing
[59e643e] (branch_2b) branch 2b
[0f4c880] (branch_2_a) branch 2a
は全ての外に分岐している:
[a74eb2a] checkout 1
を私は
git rebase -i 328454f
を試したこと
* | [a74eb2a] checkout 1
* | [9a8dd6a] added branch_2 line
renamed to:
* | [a74eb2a] branch 2 commit 2
* | [9a8dd6a] branch 2 commit 1
注意
は、私が変更したいとリベース処理を継続として、その後
git commit --amend -m "the new message"
を実行しているコミット上の「編集」に「ピック」に変化します。
このアプローチの問題点は、最後にgit rebase --continue
の2つの新しいコミット(私が名前を変更したかった2つの複製)で終了したことです。
* [cf0149e] (HEAD, branch_2) more editing
* [8fcc106] some edit
* [3ff23f0] branch 2 commit 2
* [2f287a1] branch 2 commit 1
|
| * [59e643e] (branch_2b) branch 2b
| /
|/
| | * [0f4c880] (branch_2_a) branch 2a
| |/
| |/
| * [a74eb2a] checkout 1
| * [9a8dd6a] added branch_2 line
|/
|
| * [bb903de] (branch_3) branch 3
|/
|
| * [674e08c] (branch_1) commit 1
| * [7d3db01] added branch_1 line
|/
* [328454f] (0.0.0) test
言い換えれば、私は今、まったく同じコードの状態を表すコミットの2セットを持っている:私はリベースを実行した場合たとえば、HEADは「branch_2」であったグラフが次のようになります。
コミットメッセージを変更するだけでした。
また、最初のメッセージの名前を「テスト」から「初期バージョン」に変更したいとします。私はgit commit --amend -m "Initial version"
でそれをするように見えることはできません。なぜなら私がチェックアウトするとヘッドレスモードになるからです。
私は間違っていますか?確かにそれは難しいことではありません。
編集:
これは私が試したアプローチです。 もちろん、履歴を書き換えます。非常に特殊なケースの外では、それは悪い考えです。 手順は次のとおりです。
変更するブランチをチェックアウトします。 パッチファイルを作成します。コミットメッセージを変更する
git format-patch HEAD~x // Where x is how far back from HEAD you need to patch
編集パッチファイルを。 ヘッドをリセットします。
git reset --hard HEAD~x // Same x as before
のパッチを適用します。
git am 000*
新しいコミットは、SHA1の新で作成されます。 修正されたメッセージで新しいコミットを参照するブランチがある場合は、それらを移動するにはgit rebase
を使用する必要があります。
私自身の例を使用するには、パッチの手順を適用した後、私はこれでアップを終えた:
* [7761415] (HEAD, branch_2) branch 2 commit 4
* [286e1b5] branch 2 commit 3
* [53d638c] branch 2 commit 2
* [52f82f7] branch 2 commit 1
| * [bb903de] (branch_3) branch 3
|/
| * [59e643e] (branch_2b) branch 2b
| | * [0f4c880] (branch_2_a) branch 2a
| |/
| * [a74eb2a] checkout 1
| * [9a8dd6a] added branch_2 line
|/
| * [674e08c] (branch_1) commit 1
| * [7d3db01] added branch_1 line
|/
* [328454f] (0.0.0) test
だから、私は私のbranch_2がうまくラベルコミットしています。 今私は[53d638c] branch 2 commit 2
チェックアウトbranch_2a
git checkout branch_2a
のうちに分岐が
git rebase 53d638c
今、私はそれをリベースようbranch_2aを移動したい:
* [fb4d1c5] (HEAD, branch_2a) branch 2a
| * [7761415] (branch_2) branch 2 commit 4
| * [286e1b5] branch 2 commit 3
|/
* [53d638c] branch 2 commit 2
* [52f82f7] branch 2 commit 1
| * [bb903de] (branch_3) branch 3
|/
| * [59e643e] (branch_2b) branch 2b
| * [a74eb2a] checkout 1
| * [9a8dd6a] added branch_2 line
|/
| * [674e08c] (branch_1) commit 1
| * [7d3db01] added branch_1 line
|/
* [328454f] (0.0.0) test
同じ手順でbranch_2bの結果は
です* [ca9ff6c] (HEAD, branch_2b) branch 2b
| * [fb4d1c5] (branch_2a) branch 2a
|/
| * [7761415] (branch_2) branch 2 commit 4
| * [286e1b5] branch 2 commit 3
|/
* [53d638c] branch 2 commit 2
* [52f82f7] branch 2 commit 1
| * [bb903de] (branch_3) branch 3
|/
| * [674e08c] (branch_1) commit 1
| * [7d3db01] added branch_1 line
|/
* [328454f] (0.0.0) test
これはまさに私が探していたものです。 あまりにも乱雑です。もう一度、非常に特殊なケースの外でやりたいことではありません。私の場合、Gitを学ぶために遊んでいるだけなので、実際のコードリポジトリにはあまり影響しません。あなたがする必要がある場合は、これを行うことができることを知ってうれしいです。
最初のコミットの名前を変更します。
できません。 Gitはサーバ指向ではないはずです。他の場所にプッシュすると、それだけです。 –
あなたはどのようにしてあなたの支店とそのすべての素晴らしい図を手に入れましたか?それはgitコマンドか、それともあなた自身でASCIIを使って描いたのですか? –