[解決済み】Gitで現在の変更を別のブランチにコミットする方法【重複あり
質問
時々、自分の作業ディレクトリに変更を加えることがありますが、その変更は現在のブランチとは別のブランチにコミットする必要があることに気づきます。これは、新しいことを試したりテストをしたりするときに、事前に新しいブランチを作成するのを忘れてしまい、かといって汚いコードを master ブランチにコミットしたくはないという場合によく起こります。
だから コミットされていない変更 (あるいはインデックスに保存されている変更) を、現在のブランチとは別のブランチにコミットするにはどうしたらいいのでしょうか?
解決方法は?
他のブランチをチェックアウトしてからコミットするという提案は、ローカルの変更を考慮した上でチェックアウトが可能である場合にのみ有効です。そうでない場合、あなたは最も一般的な
git stash
:
git stash
git checkout other-branch
git stash pop
最初の
stash
は変更を隠し(基本的に一時的なコミットを行う)、その後の
stash pop
はそれを再適用します。これにより、Gitはマージ機能を使うことができます。
もし、隠したものを取り出そうとしたときに、マージの競合に遭遇したら・・・次のステップは、その競合が何であるかによって決まります。隠した変更が本当に別のブランチに属するものであれば、単にそれらを整理することになります。それは、間違ったブランチで変更を行った結果です。
一方、本当に失敗してしまった場合、作業ツリーに2つのブランチの変更が混在しており、コンフリクトが発生しているのは元のブランチにコミットし直したいものだけであれば、作業を軽減することができます。いつものように、これを行うには多くの方法があります。ここでは、コンフリクトをポップアップで表示したところから始めてみましょう。
# Unstage everything (warning: this leaves files with conflicts in your tree)
git reset
# Add the things you *do* want to commit here
git add -p # or maybe git add -i
git commit
# The stash still exists; pop only throws it away if it applied cleanly
git checkout original-branch
git stash pop
# Add the changes meant for this branch
git add -p
git commit
# And throw away the rest
git reset --hard
あるいは、こうなることを前もってわかっているのであれば、単に現在のブランチに属するものをコミットすればよいのです。そのコミットは、いつでも戻って修正することができます。
git add -p
git commit
git stash
git checkout other-branch
git stash pop
そしてもちろん、この作業には少しばかり手間がかかることを忘れずに、次回はこれを避けるために、プロンプトに現在のブランチ名を入れて
$(__git_ps1)
に
PS1
環境変数で
バッシュラック
ファイルに記述します。(例えば
BashでGit
のドキュメントを参照してください)。
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] リモートのGitブランチをチェックアウトするには?
-
[解決済み] Git リポジトリを以前のコミットに戻すにはどうすればよいですか?
-
[解決済み] 現在のGit作業ツリーからローカル(未追跡)ファイルを削除する方法
-
[解決済み] 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 revert <hash> not allowed due to a merge but no -m option was given.
-
[解決済み】Githubエンタープライズ - リモート。Git の操作でパスワード認証が利用できない
-
[解決済み] リモートの <ブランチ名> とマージするように設定されていますが、そのような参照は取得されませんでしたか?
-
[解決済み] LFはgitでCRLFに置き換えられます - それは何ですか、そしてそれは重要ですか?[重複]。
-
[解決済み] git update-index --assume-unchanged <file> を元に戻す。
-
[解決済み] 新しいBitbucketでリポジトリを削除するにはどうすればよいですか?
-
[解決済み] ローカルの未コミットの変更を別のGitブランチにマージするには?
-
[解決済み】gitで他のブランチに切り替えるにはどうしたらいいですか?
-
[解決済み] Masterでの未コミットの変更をGitで新しいブランチに入れる