回答:
コミットせずに、で作業を隠しておくことができますgit stash
。あなたはgit stash pop
それを取り戻すために使うでしょう。または、(carleetoが言ったように)git commit
別のブランチにそれをすることができます。
次のようにして、特定の日付でコミットをチェックアウトできますrev-parse
。
git checkout 'master@{1979-02-26 18:30:00}'
使用可能なオプションの詳細については、を参照してくださいgit-rev-parse
。
コメントで述べたように、このメソッドはreflogを使用して履歴内のコミットを見つけます。デフォルトでは、これらのエントリは90日後に期限切れになります。reflogを使用するための構文はそれほど冗長ではありませんが、90日間しか戻ることができません。
reflogを使用しないもう1つのオプションrev-list
は、特定の時点でコミットを取得するために使用する方法です。
git checkout `git rev-list -n 1 --first-parent --before="2009-07-27 13:37" master`
マージによって持ち込まれたバージョンではなく履歴のみが必要な場合は、-first-parentに注意してください。それはあなたが通常望んでいることです。
git co 'master@{2 days ago}'
。
git rev-list -n 1 --before="2009-07-27 13:37" master
$(...)
が推奨されます。
アンディの解決策は私にはうまくいきません。ここで私は別の方法を見つけました:
git checkout `git rev-list -n 1 --before="2009-07-27 13:37" master`
error: unknown switch `n'
すると、これを回避する方法がわかりますか?
これに沿って何かが必要なようです: 日付に基づくGitチェックアウト
言い換えれば、あなたrev-list
はコミットを見つけ、チェックアウトを使って実際にそれを取得するのに使用します。
段階的な変更を失いたくない場合、最も簡単な方法は、新しいブランチを作成して、そのブランチにコミットすることです。ブランチ間をいつでも切り替えることができます。
編集:リンクがダウンしているので、ここにコマンドがあります:
git checkout `git rev-list -n 1 --before="2009-07-27 13:37" master`
git checkout branch@{date}
、reflogが期限切れになると動作を停止しますが、を使用できますgit checkout `git rev-list -n 1 --before="2009-07-27 13:37" master`
。
パイプでコマンドを置き換えることを好む人へ
git rev-list -n1 --before=2013-7-4 master | xargs git checkout
git rev-parse
あなたが興味を持っている日がある場合@Andyによって提案された解決策は罰金を作品の日付をコミット。ただし、作成者の日付に基づいてチェックアウトしたい場合は、rev-parse
その日付を使用してコミットを選択するオプションがないため、機能しません。代わりに、以下を使用できます。
git checkout $(
git log --reverse --author-date-order --pretty=format:'%ai %H' master |
awk '{hash = $4} $1 >= "2016-04-12" {print hash; exit 0 }
)
(awk述部$1 >= "2016-04-12" && $2 >= "11:37"
で時間の使用も指定したい場合。)
ビルド時にリポジトリの正確なバージョンに戻れるようにしたい場合は、ビルド元のコミットにタグを付けることをお勧めします。
他の回答は、特定の時点でブランチの最新のコミットにリポジトリを戻すための手法を提供しますが、常に十分であるとは限りません。たとえば、ブランチからビルドし、後でブランチを削除したり、後でリベースしたブランチからビルドしたりすると、ビルドしたコミットが現在のブランチからgitで「到達不能」になる可能性があります。git内の到達不能オブジェクトは、リポジトリが圧縮されるときに最終的に削除される可能性があります。
コミットにタグを付けると、後でブランチをどのように処理しても(タグを削除しない限り)、タグが到達不能になることはありません。
git rev-list -n 1 --before="2009-07-27 13:37" origin/master
印刷された文字列(たとえばXXXX)を受け取り、次のようにします。
git checkout XXXX
git bisect good
ポイントとして使用します。