ソースコードのリグレッションに取り組んでいます。Git に「パラメーター化された日付/時刻に基づいてソースをチェックアウトしてください」と伝えたいと思います。これは可能ですか?
また、現在のビューには、失いたくない段階的な変更があります。理想的には、現在のソースと、以前の日付に基づいて興味のあるバージョンとの間を行き来したいと考えています。
ソースコードのリグレッションに取り組んでいます。Git に「パラメーター化された日付/時刻に基づいてソースをチェックアウトしてください」と伝えたいと思います。これは可能ですか?
また、現在のビューには、失いたくない段階的な変更があります。理想的には、現在のソースと、以前の日付に基づいて興味のあるバージョンとの間を行き来したいと考えています。
を使用すると、作業をコミットせずに隠しておくことができます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 checkout `git rev-list -n 1 --before="2009-07-27 13:37" master`
これに沿って何かが必要なようです: 日付に基づくGitチェックアウト
つまり、rev-list
コミットを検索し、チェックアウトを使用して実際に取得するために使用します。
段階的な変更を失いたくない場合、最も簡単な方法は、新しいブランチを作成し、それらをそのブランチにコミットすることです。ブランチはいつでも切り替えることができます。
編集:リンクがダウンしているので、コマンドは次のとおりです。
git checkout `git rev-list -n 1 --before="2009-07-27 13:37" master`
私の場合、この-n 1
オプションは機能しません。Windows では、次の一連のコマンドが正常に機能することがわかりました。
git rev-list -1 --before="2012-01-15 12:00" master
これは、指定された日付の適切なコミットの SHA を返します。
git checkout SHA
関心のある日付がコミットの日付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