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 master
git 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
)g
c の後にあるように並べ替えたい場合は、rebase コマンドを からpick
に変更しfixup
ます。dd
行を削除し、P
配置し、i
挿入モードに入って「fixup」と入力:wq
し、保存してvimを終了します。master: a-b-c'-d'-e'-f'
、リベース中です。祖先が変更されたため、git に関する限り「同じ」コミットではありませんが、内容は同じままです)c'
g
c
d-e-f
d'-e'-f'
d-e-f
(そして、作成したことがないかのように履歴を書き換えたい場合)(プッシュした場合、下流の人々は上流のリベースから回復する必要があります):
git stash .
git checkout master
master: 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 stash
git revert --no-commit d
git revert --no-commit e
git revert --no-commit f
git push
git stash pop
(競合は発生しません)git stage .
git commit -m "Undo d-e-f in order to fix..."
git push
git push
def があり、それらを別々に保持したい場合:あなたの新しい変更は、新しいブランチ オフ マスター用のもののようです。git branch <foo>
.
このコミットから新しいブランチを作成し、次のことを行いますcommit
。
git checkout -b <branchname>
git commit
ファイルをすでにステージング (つまりgit add myfile1 myfile2
) していると仮定します。