Git を使用していたので、特定のコミットに戻る必要がありました。私はいくつかの変更を加えましたが、今それらをコミットしたいと思います。これを行う適切な方法は何ですか?
私のプロジェクトは現在、切り離された HEAD 状態になっています。でコミットすると変更が保存されますか
git commit
? それ以外の場合、変更を失わないようにするにはどうすればよいですか?
Git を使用していたので、特定のコミットに戻る必要がありました。私はいくつかの変更を加えましたが、今それらをコミットしたいと思います。これを行う適切な方法は何ですか?
私のプロジェクトは現在、切り離された HEAD 状態になっています。でコミットすると変更が保存されますか
git commit
? それ以外の場合、変更を失わないようにするにはどうすればよいですか?
免責事項: git は複雑ではなく、用途が広いだけです。長い答えになってしまったからといって、怖がらないでください :)
持っていた:
master: a-b-c-d-e-f
と変更したかったc。あなたがしたこと:
* git checkout c(今後コミットをチェックアウトするのを避けてください。代わりにブランチ ヘッドを移動してください)
*いくつかのファイルを変更しました
あなたがいる:
マスター: abcdef
\uncommitted-work,detached
(プッシュした場合、下流の人々は上流の rebase から回復する必要があります)
git stash .git checkout mastergit stash pop(競合を解決する)git stage .git commit -m "temporary name for g"master: a-b-c-d-e-f-g)git rebase c -i(「現在のブランチをポイント c に再適用し、コミットをインタラクティブに操作させてください」、つまり、d-e-f新しい に再親 (リベース) しますc)gc の後にあるように並べ替えたい場合は、rebase コマンドを からpickに変更しfixupます。dd行を削除し、P配置し、i挿入モードに入って「fixup」と入力:wqし、保存してvimを終了します。master: a-b-c'-d'-e'-f'、リベース中です。祖先が変更されたため、git に関する限り「同じ」コミットではありませんが、内容は同じままです)c'gcd-e-fd'-e'-f'd-e-f(そして、作成したことがないかのように履歴を書き換えたい場合)(プッシュした場合、下流の人々は上流のリベースから回復する必要があります):
git stash .git checkout mastermaster: a-b-c-d-e-f、元は c に基づいた隠しファイル)git reset --hard c(すべてのファイルを破棄し、c 以降のマスターでコミットします)master: a-b-c、隠しファイルあり)git stash pop(競合を解決する)master: a-b-c-*)git stage .git commit -m "description of g"master: a-b-c-g)git stashgit revert --no-commit dgit revert --no-commit egit revert --no-commit f git push git stash pop(競合は発生しません)git stage .git commit -m "Undo d-e-f in order to fix..."git pushgit pushdef があり、それらを別々に保持したい場合:あなたの新しい変更は、新しいブランチ オフ マスター用のもののようです。git branch <foo>.
このコミットから新しいブランチを作成し、次のことを行いますcommit。
git checkout -b <branchname>
git commit
ファイルをすでにステージング (つまりgit add myfile1 myfile2) していると仮定します。