特定のリビジョンに移動


582

特定のプロジェクトのgitリポジトリのクローンを作成しました。ファイルを初期状態にして、レビュー時にファイルをリビジョン2、3、4に移動することはできますか...最新ですか。プロジェクトがどのように進化してきたかについて概要を知りたいのですが。

回答:


874

git checkout <sha1>特定のコミットをチェックアウトするために使用します。


2
あなたはこれを行うことができますgit log -n1。しかし、git checkout失敗しない限り、それは努力の無駄です。
Marcelo Cantos、2011

2
できます。私は完全なsha1(部分的ではない)を使用する必要がありました。また、プロジェクトを2番目のリビジョンにしたい場合はどうすればよいですか?git log現在、最初のコミットのみを表示していますが、次のコミットのsha1を見つけることはできますか?
xralf '25

6
一意性を保証するには、十分な数のsha1を使用するだけで済みます。たぶん、あなたは不運な偶然があったのでしょう。Gitには「次の」コミットの概念はありません。履歴は、すべての矢印が後方を指すDAGです。git log --oneline参照用に出力を実行してテキストファイルに貼り付ける必要があります(出力が提供する省略されたsha1の合計は一意であることが保証されています)。別のオプション、あなたの歴史が線形であるならば、最初までコミットからあるどのように多くのコミットを把握することでmaster、使用するgit checkout master~543(543のコミットがある場合)、そしてgit checkout master~542、など
マルセロカントス

20
そして、「git checkout <sha1>」から現在のコミットにチェックアウトする方法は?
アレックス

6
@AlexanderSupertrampブランチをチェックアウトします。
Marcelo Cantos 2015年

50

特定のバージョン/コミットに移動するには、次のコマンドを実行します。あなたが得ることができるハッシュコードgit log --oneline -n 10

git reset --hard HASH-CODE

-特定のバージョン/コミットにリセットした後git pull --rebase、破棄されたすべてのコミットを取り戻したい場合は、を実行できます。


1
a resetはグラフの特定のポイントをチェックアウトするだけでなく、現在チェックアウトされているブランチも移動することに注意してください
Liam

また、resetでは、保留中のすべての変更が破棄されます。
WilliamKF

2
--hardフラグは、ハッシュの後にコミットをすべて削除します...おそらく、ここに少しtidを追加したいと思います。人々は歴史を失い、その理由を疑問に思っていると思います。
Urasquirrel

git pull --rebaseリポジトリ用のリモートがあり、それが最新の場合にのみ機能します。
キース・トンプソン

19

などのツールを使用して、プロジェクト履歴のグラフィカルビューを取得できますgitk。ただ走れ:

gitk --all

特定のブランチをチェックアウトしたい場合:

git checkout <branch name>

特定のコミットでは、ブランチ名の代わりにSHA1ハッシュを使用します。(参照TreeishesGitのコミュニティブック良い読み物である、あなたのツリーをナビゲートするための他のオプションを表示します。)

git log 詳細または要約の履歴を表示するためのオプションのセットもすべてあります。

コミット履歴を進める簡単な方法は知りません。線形の履歴を持つプロジェクトは、おそらくそれほど一般的ではありません。SVNやCVSのような「改訂」というアイデアは、Gitではそれほどうまくマッピングされていません。


2
注意:gitは、プロジェクトの1つの線形履歴を提供するだけでは嘘をつきません。それは、プロジェクトが実際にそのように進化していない限りです。
Andres Jaan Tack

コミットは「将来」を参照しないため、前進することは論理的には意味がありません(線形履歴においても)。せいぜい、問題のコミットを親として持つすべてのコミットを識別できます。ちなみに、マージのため、後方に移動することも簡単なことではありません。
Marcelo Cantos、2011

5

コミットのSHA1キーを使用すると、次のことができます。

  • まず、特定のファイルに必要なコミットを見つけます。

    git log -n <# commits> <file-name>

    これは、に基づいて<# commits>、特定のファイルのコミットのリストを生成します。

    ヒント:探しているコミットがわからない場合は、次のコマンドを使用するとわかります。 git diff <commit-SHA1>..HEAD <file-name>。このコマンドは、コミットの現在のバージョンと特定のファイルの以前のバージョンのコミットの違いを表示します。

    注:コミットのSHA1キーは、git log -nのリストで次のようにフォーマットされます。

コミット <SHA1 id>

  • 次に、目的のバージョンをチェックアウトします。

    必要なコミット/バージョンが見つかったら、次のコマンドを使用します。 git checkout <desired-SHA1> <file-name>

    これにより、指定したバージョンのファイルがステージング領域に配置されます。ステージングエリアから取り出すには、次のコマンドを使用します。reset HEAD <file-name>

リモートリポジトリが指している場所に戻すには、次のコマンドを使用します。 git checkout HEAD <file-name>


2

私はマスターブランチがあり、17.0という別のブランチがあり、この17.0内に「XYZ」というコミットハッシュが存在する状況でした。そして、顧客はそのXYZリビジョンまでビルドを与えられます。今、私たちはバグに遭遇しました、そして、それはその顧客のために解決される必要があります。そのため、その「xyz」ハッシュまで、その顧客用に別個のブランチを作成する必要があります。だからここに私がそれをやった方法があります。

まず、ローカルマシンにその顧客名のフォルダーを作成しました。そのフォルダーが作成されたら、顧客名が「AAA」であるとすると、このフォルダー内のコマンドに従って次のように発行します。

  1. git init
  2. git cloneこのコマンドを実行すると、masterブランチに移動します。したがって、目的のブランチに切り替えます
  3. git checkout 17.0これにより、コミットが存在するブランチに移動します
  4. git checkoutこれにより、そのハッシュコミットまでリポジトリが取得されます。コミットハッシュに変更されたurブランチの名前を参照してください。このハッシュにブランチ名を付けます
  5. git branch ABCこれにより、ローカルマシンに新しいブランチが作成されます。
  6. git checkout ABC
  7. git push origin ABCこれにより、このブランチがリモートリポジトリにプッシュされ、gitサーバーにブランチが作成されます。完了です。

1

1つの方法は、これまでにパッチに対して行われたすべてのコミットを作成することです。最初のコミットをチェックアウトし、読んだ後、順番にパッチを適用します。

使用git format-patch <initial revision>してからgit checkout <initial revision>。パッチである4桁から始まるファイルが山積みになっているはずです。

リビジョンの読み取りが終わったら、次のgit apply <filename>ように git apply 0001-*してカウントしてください。

しかし、なぜパッチそのものを読みたくないのか、本当に不思議に思います。私は好奇心が強いので、コメントにこれを投稿してください。

gitマニュアルでもこれが得られます:

git show next~10:Documentation/README

ドキュメント/ READMEファイルの内容を、次のブランチの最後の10番目のコミットで最新のものとして表示します。

またgit blame filename、各行がコミットハッシュ+作成者に関連付けられているリストを表示することもできます。


1

特定のコミット済みコードを取得するには、そのコミットのハッシュコード必要です。次の2つの方法でハッシュコードを取得できます。

  1. github / gitlab / bitbucketアカウントから入手してください。(それはあなたのコミットURLにあります、すなわち:github.com/user/my_project/commit/ commit_hash_code)、またはあなたはできる
  2. git logそのブランチでの最近のコミットを確認してください。コミットのハッシュコードと、コードのコミット中に残したメッセージが表示されます。ただコピーしてからgit checkout commit_hash_code

そのコードに移動した後、そのコードに取り組んで変更を加えたい場合は、で別のブランチを作成する必要git checkout -b <new-branch-name>があります。そうしないと、変更が保持されません。


0

コミットをチェックアウトするには(nbあなたは過去を見ています!)

  • git checkout "commmitHash"

残酷にコミットから再起動し、おそらく失敗した後のブランチを削除します。

  • git reset --hard "commmitHash"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.