[解決済み] Git master の未段階/未コミットの変更からブランチを作成する
質問
コンテキスト マスターで簡単な機能を追加する作業をしています。数分後、それはそれほど単純ではなく、新しいブランチに作業する方がよかったと気づきました。
このようなことがいつも起こるのですが、別のブランチに切り替えて、masterブランチをきれいにして、コミットされていない変更をすべて持っていく方法を思いつきません。私はこう考えました。
git stash && git stash branch new_branch
は単純にそれを達成することができますが、私はこれを取得します。
~/test $ git status
# On branch master
nothing to commit (working directory clean)
~/test $ echo "hello!" > testing
~/test $ git status
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: testing
#
no changes added to commit (use "git add" and/or "git commit -a")
~/test $ git stash
Saved working directory and index state WIP on master: 4402b8c testing
HEAD is now at 4402b8c testing
~/test $ git status
# On branch master
nothing to commit (working directory clean)
~/test $ git stash branch new_branch
Switched to a new branch 'new_branch'
# On branch new_branch
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: testing
#
no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (db1b9a3391a82d86c9fdd26dab095ba9b820e35b)
~/test $ git s
# On branch new_branch
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: testing
#
no changes added to commit (use "git add" and/or "git commit -a")
~/test $ git checkout master
M testing
Switched to branch 'master'
~/test $ git status
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: testing
#
no changes added to commit (use "git add" and/or "git commit -a")
これを実現する方法はないのでしょうか?
どのように解決するのですか?
ためる必要がない。
アップデート2020 / Git 2.23
Git 2.23では、新たに
switch
サブコマンドの過剰な使用によって引き起こされる混乱を解消するための試みである。
checkout
(ブランチの切り替え、ファイルのリストア、HEADのデタッチなど)
このバージョンの Git からは
git checkout
というコマンドを以下に示します。
git switch -c <new-branch>
動作は変わりません。
Update 2020 / Git 2.23以前
git checkout -b new_branch_name
はローカルの変更に手をつけません。ただ、現在の HEAD からブランチを作成し、そこに HEAD を設定するだけです。 というわけで、これがあなたの望むものだと思います。
--- チェックアウトしたマスターの結果を説明するために編集する ---。
という理由で混乱していませんか?
checkout master
は変更を破棄しないのですか?
変更はローカルにしか存在しないので、gitは変更を簡単に失くして欲しくありません。ブランチを変更しても、gitはローカルの変更を上書きしません。その結果
checkout master
となります。
M testing
git は HEAD を変更しましたが、ローカルファイルを上書きしたわけではありません。そのため、最後のステータスにはローカルの変更が表示されたままになっています。
master
.
本当にローカルの変更を破棄したいのであれば、チェックアウトを強制するために
-f
.
git checkout master -f
あなたの変更はコミットされなかったので、あなたはそれらを失うことになります。
自分のブランチに戻り、変更をコミットして、再度masterをチェックアウトしてみてください。
git checkout new_branch
git commit -a -m"edited"
git checkout master
git status
を取得する必要があります。
M
というメッセージは最初のチェックアウトの後に表示されますが、その後
checkout master
と
git status
は、変更されたファイルがないことを示すはずです。
--- 作業ディレクトリ(ローカルファイル)についての混乱を解消するための編集 ---。
最初のコメントに対する答えですが、ローカルの変更はあくまでローカルです。Gitは自動的に保存しないので、後で保存するように指示しなければなりません。
変更を加えても、明示的にコミットしたり保存したりしなかった場合、git はそれをバージョン管理しません。HEAD を変更した場合 (
checkout master
) の場合、ローカルでの変更は未保存なので上書きされません。
関連
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] リモートのGitブランチをチェックアウトするには?
-
[解決済み] 現在のGit作業ツリーからローカル(未追跡)ファイルを削除する方法
-
[解決済み] Git で、ステージされていない変更を破棄するにはどうしたらいいですか?
-
[解決済み] Git でブランチからコミットを削除する
-
[解決済み] git のコミットを削除しても、変更は維持できますか?
-
[解決済み】"git pull" でローカルファイルを強制的に上書きするには?
-
[解決済み] 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のエラー。リモートリポジトリへの接続時に「Host Key Verification Failed」。
-
[解決済み】以下の追跡されていないワーキングツリーファイルは、マージによって上書きされますが、私は気にしません。
-
[解決済み】ERROR: Error cloning remote repo 'origin'.
-
[解決済み] あなたのブランチは 'origin/master' より 3 コミット進んでいます。
-
Gitのプッシュでエラーが発生! [リモート拒否] master -> master (pre-receive hook declined) error: failed to push some refs to .......
-
[解決済み] Git - node_modules フォルダをどこでも無視するようにしました。
-
[解決済み] ステージングされた変更のみをgitに保存する - それは可能ですか?
-
[解決済み] 現在の変更点を含むGitブランチの作成
-
[解決済み】Gitで、既存の未コミットの作業を新しいブランチに移動する