GitHubプロジェクトから特定のコミットを取得する方法


151

GitHubからFacebook APIをダウンロードする必要があります。通常、[ダウンロード]タブをクリックして最新のソースコードをダウンロードします。この場合、古いコミットが必要です:91f256424531030a454548693c3a6ca49ca3f35aが、そのコミットからプロジェクト全体を取得する方法がわかりません...

誰か私にこれを行う方法を教えてもらえますか?

(ところで、Macではim。それが何か違いがあるかどうかはわかりません)。


1
「zipped-snapshot-code」のみが必要な場合は、stackoverflow.com / questions / 13636559 / … も参照してください。
Jean Fontaine

回答:


216

まず、gitを使用してリポジトリを複製します。例:

git clone git://github.com/facebook/facebook-ios-sdk.git

これにより、リポジトリの完全な履歴がダウンロードされるため、任意のバージョンに切り替えることができます。次に、新しくクローンしたリポジトリに変更します。

cd facebook-ios-sdk

...を使用git checkout <COMMIT>して、正しいコミットに変更します。

git checkout 91f25642453

ブランチにいないため、特定のバージョンに直接切り替えたため、警告が表示されます。(これは「デタッチされたHEAD」状態と呼ばれます。)このSDKは、積極的に開発するのではなく、このSDKのみを使用したいかのように聞こえるので、調べることに興味がない限り、心配する必要はありません。 gitの動作についての詳細。


4
この時点でgit export、ファイルのみが必要な場合もできます。
Xeoncross 2012

1
git checkout -q <commit#>gitチェックアウト中に警告stderrを停止します。
Manavalan Gajapathy

git checkout 441b034635240bc873700473af3e98533e94a0b5を実行すると、次のエラーが発生します:fatal:reference is not a tree:441b034635240bc873700473af3e98533e94a0b5
ttb

135

あなたがこの質問を投稿したときにそこにあったかどうかはわかりませんが、コミットをダウンロードする最も簡単な方法は、リポジトリを表示しているときに[ コミット ]タブをクリックすることです。代わりにコミット名をクリックすると次に、をクリックして履歴のこの時点で参照リポジトリを持つボタン<>コミット名/メッセージの右側にシンボル、そして最後にダウンロードZIPのあなたがクリックしたときに来てボタンクローンかダウンロードボタン。

皆さんのお役に立てば幸いです。


3
これは、githubに履歴があるが「公式」のgitタイムラインから削除されたコミットである「失われたコミット」を回復する唯一の方法です。これを使用して、忘却にリベースされたコミットのzipスナップショットを取得し、そのコミットを新しいブランチにプッシュし、そのブランチを既存のリポジトリにフェッチして、それを存在に戻すことができます。
Ajax

@Ajaxそうではありません。それでもを使用してshaを取得しgit reflog、分離されたコミットをチェックアウトできます
Aaron Brager

@AaronBrager確かに、reflogは機能します。最初にコミットしたマシンと同じマシンにいる場合です。OPはすでにコミットを認識しているため、reflogは必要なく、直接チェックアウトできます。ただし、ローカルでコミットしておらず、まだパブリックリポジトリにあるブランチにない場合について話しています。これらの場合でも、githubにはまだコミットの記録が残っている可能性があります。その記録をzipとしてダウンロードして、そのコミットを回復できます。
Ajax

@Ajaxああ、説明してくれてありがとう。別の方法として、GitHub API(api.github.com/repos/facebook/facebook-ios-sdk/events)にアクセスして、孤立したコミットからブランチを作成することもできます(手順はこちら
Aaron Brager

非常に素晴らしい。+1 githubのreflogをそのようにクエリできることを知りませんでした!
Ajax

27

シヴァンの答えをgifで ここに画像の説明を入力してください

1. githubでコミットをクリックします

2.各コミットの右側にあるコードを参照を選択します

3.ダウンロードzipをクリックします。コミットの時点でソースコードがダウンロードされます。


こんにちは、スラジ。どうやって画面のgifを作成したのですか。
Rahul Satal、2015

クイックタイムプレーヤーを使用して画面のビデオを録画します。使用可能なツール.Google itを使用して、ビデオをgifに変換します。@ Rahul Satal
Suraj K Thomas

1
GIFをありがとう@SurajKThomas
Sivan

10

7桁のSHA1短縮形を使用してコミットをダウンロードするには、次のようにします。

実例:

https://github.com/python/cpython/archive/31af650.zip  

説明:

 `https://github.com/username/projectname/archive/commitshakey.zip`

長いハッシュキーがある場合は31af650ee25f65794b75d4dfefed6fe4758781c1、最初の7文字を取得し31af650ます。これはGitHubのデフォルトです。


8

(githubにのみ存在し、ローカルには存在しない)失われたコミットを回復するために私が見つけた最も簡単な方法は、このコミットを含む新しいブランチを作成することです。

  1. コミットを開いてください(github.com/org/repo/commit/long-commit-shaなどのURL)
  2. 右上の「ファイルを参照」をクリックします
  3. 左上のドロップダウン「ツリー:ショートシャ...」をクリックします
  4. 新しいブランチ名を入力してください
  5. git pull ローカルへの新しいブランチ

この回答は、受け入れられている回答よりも一般的です。この状況に遭遇したのですが、私が望んでいたコミットはすでにマスターブランチで消えており、Githubは既存のブランチ以外のすべてのコミットを保持しません。したがって、このアプローチでは、Github上のコミットから新しいブランチが作成され、プル可能になります。
Qi Luo

これにより、私がPRを行った削除されたフォークからコミット(元のSHAはそのまま)を回復することができました。新しいフォークを作成した後、上流のリポジトリでPRコミットを開き、「ファイルを参照」しました。次に、そのURLをコピーして、ユーザー名を自分のものに置き換えました。次に、[ツリー:]ドロップダウンをクリックして、私のフォークに新しいブランチを作成しました。よくできました!
アレンルーチェ

2

質問のタイトルがあいまいです。


1

受け入れられた答えに加えて:

提案されたコマンド「git checkout hash」を使用する必要があるハッシュを表示するには、を使用できますgit log。ただし、必要に応じて、ハッシュのコピー/貼り付けよりも簡単な方法があります。

を使用するgit log --onelineと、多くのコミットメッセージをより圧縮された形式で読み取ることができます。

これが、最小限の情報と一部しか表示されていないハッシュを含むコミットの1行のリストであるとします。

hash111 (HEAD -> master, origin/master, origin/HEAD)
hash222 last commit
hash333 I want this one
hash444 did something
....

必要に応じてlast commit使用できますgit checkout master^^あなたコミットできます前に、マスター。ですからhash222

最後のn番目のコミットが必要な場合は、を使用できますgit checkout master~n。たとえば、を使用git checkout master~2するとコミットが得られますhash333


0

コミットをナビゲートする代わりに、yキーを押すこともできます(Githubヘルプキーボードショートカット)をて、現在のリビジョン/コミットの「パーマリンク」を取得。
これにより、URLがhttps://github.com/<user>/<repository>(master / HEAD)からに変更されますhttps://github.com/<user>/<repository>/tree/<commit id>

特定のコミットをダウンロードするには、そのURLからページをリロードする必要があるため、Clone or Downloadボタンはhttps://github.com/<user>/<repository>/archive/<commit id>.zip 最新のものではなく「スナップショット」を指しますhttps://github.com/<user>/<repository>/archive/master.zip


0

次のコマンドシーケンスを試してください。

$ git fetch origin <copy/past commit sha1 here>
$ git checkout FETCH_HEAD
$ git push origin master

-1

特定のコミットを実行したい場合、または特定のコミットのコードを作成したい場合は、以下のコマンドを使用できます。

git checkout <BRANCH_NAME>
git reset --hard  <commit ID which code you want>
git push --force

例:

 git reset --hard fbee9dd 
 git push --force

2
これは危険です。リポジトリを複製してバージョンをチェックアウトする方が理にかなっています
user1767754
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.