[解決済み] Git で最新のコミットを新しいブランチに移動する
質問
master にコミットした最後の数回分のコミットを新しいブランチに移動して、master をそれらのコミットが行われる前に戻したいのですが、どうすればいいですか? 残念ながら、私のGit-fuはまだ十分に強くありません。
つまり、どうすればこの状態から
master A - B - C - D - E
を、これに変更しますか?
newbranch C - D - E
/
master A - B
解決方法は?
既存のブランチへの移動
にコミットを移動させたい場合。 既存のブランチ の場合、次のようになります。
git checkout existingbranch
git merge master
git checkout master
git reset --hard HEAD~3 # Go back 3 commits. You *will* lose uncommitted work.
git checkout existingbranch
この操作を行う前に、コミットされていない編集をstashに保存するには、次のようにします。
git stash
. 完了したら、隠したコミットされていない編集を取り出すには
git stash pop
新しいブランチに移動する
警告
この方法は、最初のコマンドで新しいブランチを作成しているため、うまくいきます。
git branch newbranch
. にコミットを移動させたい場合は
既存のブランチ
を実行する前に、変更点を既存のブランチにマージする必要があります。
git reset --hard HEAD~3
(参照
既存のブランチへの移動
上記)をご覧ください。
最初にマージしないと、変更内容が失われてしまいます。
他の事情がない限り、ブランチとロールバックによって簡単に行うことができます。
# Note: Any changes not committed will be lost.
git branch newbranch # Create a new branch, saving the desired commits
git reset --hard HEAD~3 # Move master back by 3 commits (Make sure you know how many commits you need to go back)
git checkout newbranch # Go to the new branch that still has the desired commits
ただし、何コミットまで遡るかは確認してください。別の方法として
HEAD~3
を指定する場合、単純にコミットのハッシュ(または
オリジン/マスター
に戻したいのですが。
マスター
(/current)ブランチのようなものです。
git reset --hard a1b2c3d4
*1 あなたは のみ しかし、そのコミットは newbranch にも残りますので、ご安心ください!
警告
Git バージョン 2.0 以降では、後で
git rebase
の上に新しいブランチを作成し、元のブランチ (
master
) ブランチが必要な場合は、明示的に
--no-fork-point
オプションを指定することで、リベース時に引き継いだコミットを失わないようにすることができます。 このオプションは
branch.autosetuprebase always
を設定すると、この可能性が高くなります。 参照
John Mellorの回答
をご覧ください。
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] git pull」と「git fetch」の違いは何ですか?
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] リモートのGitブランチをチェックアウトするには?
-
[解決済み] Git リポジトリを以前のコミットに戻すにはどうすればよいですか?
-
[解決済み] 現在のGit作業ツリーからローカル(未追跡)ファイルを削除する方法
-
[解決済み] Gitブランチをmasterにマージする最も良い(そして最も安全な)方法は何ですか?
-
[解決済み】ローカルのGitブランチの名前を変更するには?
-
[解決済み】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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] masterブランチと'origin/master'が分岐している、'undiverge'ブランチの方法は?
-
[解決済み】ローカルにない作業がリモートに含まれているため、アップデートが拒否された
-
[解決済み】Githubの認証に失敗した - ... GitHubはシェルアクセスを提供しない
-
[解決済み】GitHubで空のブランチを作成する
-
[解決済み】Githubエンタープライズ - リモート。Git の操作でパスワード認証が利用できない
-
[解決済み] GitBash | origin master - rejected (fetch first) | GitHub リポジトリにファイルがない。
-
[解決済み] Gitのエラー「object file ... is empty」はどうすれば直せますか?
-
[解決済み] リモートブランチにプッシュできない、ブランチに解決できない
-
[解決済み] プル後にコミットした (プッシュしていない) 変更を新しいブランチに移動させる
-
[解決済み】Gitで、既存の未コミットの作業を新しいブランチに移動する