[解決済み] 以前のコミットを保存するには?
質問
以下のような状況で、私の
git log
:
commit 111 <-- need to push it to the repository
commit 222 <-- need to stash this one
...
見ての通り、最後の(前のコミットを含まない)コミットだけをリポジトリにプッシュする必要があります。
どうすればいいのでしょうか?
git revert --soft commit_hash
が助けてくれるのでしょうか?
どのように解決するには?
リモートリポジトリにどちらのコミットもプッシュしていない場合、対話的リベースを使ってコミットを「並べ替え」、(新しい)直近のコミットの変更点のみを保存することができます。
現在のブランチの先端(この例ではコミット 111)をチェックアウトしたと仮定して、以下を実行してください。
git rebase -i HEAD~2
これはデフォルトのエディタを開き、直近の2つのコミットをリストアップし、いくつかの指示を出します。ここで何をするかは非常に慎重にしてください。事実上リポジトリの歴史を「書き換える」ことになるので、注意しなければ作業を失う可能性があります(必要なら最初にリポジトリ全体のバックアップをとってください)。以下に、例としてコミットハッシュ/タイトルを推定してみました。
pick 222 commit to be stashed
pick 111 commit to be pushed to remote
# Rebase 111..222 onto 333
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
2つのコミットをこのように並べ替えます(最も古い => 最も新しいと表示されます)。
pick 111 commit to be pushed to remote
pick 222 commit to be stashed
保存して終了すると、git はあなたが変更したふたつのコミットを書き換えるための処理を行います。問題がなければ、ふたつのチェンジセットの順番が逆になるはずです。これを確認するには
git log --oneline -5
で確認でき、新しいものから順に出力されます。
この時点で、最新のコミットでソフトリセットを行い、作業中の変更を保存しておくことができます。
git reset --soft HEAD~1
git stash
このオプションが本当に実行可能なのは、以前にリモートへこれらの変更をプッシュしていない場合のみであることを言及することが重要です。そうでなければ、そのリポジトリを使用するすべての人に問題を引き起こす可能性があります。
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] 既存の、プッシュされていないコミットメッセージを修正するには?
-
[解決済み] Git リポジトリを以前のコミットに戻すにはどうすればよいですか?
-
[解決済み] git rebase の取り消し
-
[解決済み] ローカルファイルシステムからファイルを削除せずに、Git リポジトリからファイルを削除する
-
[解決済み] すべてのGitブランチを取得する方法
-
[解決済み] 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 実装 サイバーパンク風ボタン
おすすめ
-
解決策 このリポジトリでは、別の git プロセスが実行されているようです。たとえば、「git commit」によって開かれたエディタなどです。
-
エラーが発生しました。マージされていないファイルがあるため、プリングはできません
-
Gitのエラーについて覚えておく-すべて最新にする
-
[解決済み] Gitの本番環境へのプッシュ(FTP)
-
[解決済み] チェリーピックのコンフリクトを解決するにはどうしたらいいですか?
-
[解決済み] フォルダからサブモジュールのリポジトリを作成し、そのgitコミット履歴を保持する
-
[解決済み] 新サーバーへのGitプッシュ/クローン
-
[解決済み] 対話式リベースを中断する方法(--abort が効かない場合)?
-
[解決済み] プル前にローカルとGitHubのリポジトリの差分を確認する方法 [重複]について
-
[解決済み] git add を実行してもしなくても、ブランチを切り替えたときに自分の変更点(修正、追加、削除されたファイル)が表示され続けるのはなぜですか?