[解決済み】Gitで最後のコミットを2つに分割する方法
質問
2つの作業用ブランチがあります。 マスター と フォーラム で少し修正したところです。 フォーラム ブランチに取り込みたいと思います。 マスター . しかし、残念なことに、私がチェリーピックしたいコミットには、私が望まない修正も含まれています。
解決策としては、おそらく間違ったコミットを削除して、2つの別々のコミットに置き換えることでしょう。1つは私がmasterで選びたい変更で、もう1つはそこに属さない変更です。
試してみたのは
git reset --hard HEAD^
を実行すると、すべての変更が削除されてしまうので、もう一度
git reset ORIG_HEAD
そこで質問なのですが。 にはどのような方法があるのでしょうか? スプリット 最後のコミットを2つの別々のコミットに分割しますか?
解決方法を教えてください。
インデックスを使用する必要があります。ミックスリセットをした後(" ギットリセット HEAD^")に追加します。 最初の変更点をインデックスに登録し、それをコミットします。それから 残りは
"を使用することができます。 git add "を使用すると、ファイルに加えられたすべての変更をインデックスに追加することができます。もし あるファイルに加えられたすべての変更を表示せず、その一部だけを表示させたい場合は git add -p"を使用することができます。
例を見てみましょう。例えば、myfile というファイルがあって、その中に という文章があります。
something
something else
something again
前回のコミットで修正したので、今はこんな感じです。
1
something
something else
something again
2
ここで、2つに分割することにして、挿入するのは 最初の行を最初のコミットに、最後の行を最後のコミットに挿入します。 を2回目のコミットで実行します。
まず、HEADの親に戻りますが、ファイルシステムに変更を残したいです。 というわけで、引数なしで "git reset" を使っています(いわゆる "mixed" を行います。 を使います。)
$ git reset HEAD^
myfile: locally modified
$ cat myfile
1
something
something else
something again
2
さて、私は "git add -p" を使って、コミットしたい変更をインデックスに追加しています(=I git add -p"は対話型ツールで、どのようなステージがあるか尋ねてきます。 の変更をインデックスに追加する必要があります。
$ git add -p myfile
diff --git a/myfile b/myfile
index 93db4cb..2f113ce 100644
--- a/myfile
+++ b/myfile
@@ -1,3 +1,5 @@
+1
something
something else
something again
+2
Stage this hunk [y,n,a,d,/,s,e,?]? s # split this section into two!
Split into 2 hunks.
@@ -1,3 +1,4 @@
+1
something
something else
something again
Stage this hunk [y,n,a,d,/,j,J,g,e,?]? y # yes, I want to stage this
@@ -1,3 +2,4 @@
something
something else
something again
+2
Stage this hunk [y,n,a,d,/,K,g,e,?]? n # no, I don't want to stage this
そして、この最初の変更をコミットします。
$ git commit -m "Added first line"
[master cef3d4e] Added first line
1 files changed, 1 insertions(+), 0 deletions(-)
これで、他のすべての変更(つまり、最後の行に入れた数字 "2")をコミットすることができます。
$ git commit -am "Added last line"
[master 5e284e6] Added last line
1 files changed, 1 insertions(+), 0 deletions(-)
ログをチェックして、どんなコミットがあるのかを確認しましょう。
$ git log -p -n2 | cat
Commit 5e284e652f5e05a47ad8883d9f59ed9817be59d8
Author: ...
Date: ...
Added last line
Diff --git a/myfile b/myfile
Index f9e1a67..2f113ce 100644
--- a/myfile
+++ b/myfile
@@ -2,3 +2,4 @@
something
something else
something again
+2
Commit cef3d4e0298dd5d279a911440bb72d39410e7898
Author: ...
Date: ...
Added first line
Diff --git a/myfile b/myfile
Index 93db4cb..f9e1a67 100644
--- a/myfile
+++ b/myfile
@@ -1,3 +1,4 @@
+1
something
something else
something again
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] 既存の、プッシュされていないコミットメッセージを修正するには?
-
[解決済み] Git リポジトリを以前のコミットに戻すにはどうすればよいですか?
-
[解決済み] Git で、ステージされていない変更を破棄するにはどうしたらいいですか?
-
[解決済み] まだプッシュされていない Git マージを元に戻す
-
[解決済み] git rebase の取り消し
-
[解決済み】"git pull" でローカルファイルを強制的に上書きするには?
-
[解決済み】ローカルのGitブランチの名前を変更するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Git:コミットに何も追加されていないが、未追跡のファイルが存在する
-
[解決済み】git revert <hash> not allowed due to a merge but no -m option was given.
-
[解決済み】Git Extensions。Win32 エラー 487: cygwinのヒープ用に領域を確保できなかった、Win32エラー0
-
[解決済み】gpgがデータの署名に失敗した fatal: failed to write commit object [Git 2.10.0].
-
[解決済み] [Solved] originにプッシュしようとすると、Gitが「No such remote 'origin'」と言うのはなぜですか?
-
[解決済み] SourceTree error:1407742E:SSLルーチン:SSL23_GET_SERVER_HELLO:tlsv1警告プロトコルバージョン
-
[解決済み] git ls-remote と git ls-remote origin の違い。
-
[解決済み] git rebase: "error: cannot stat 'file': パーミッションが拒否されました"
-
[解決済み] 新しいBitbucketでリポジトリを削除するにはどうすればよいですか?
-
[解決済み】履歴に埋もれてしまったGitコミットを分割する方法は?