如何从GitHub项目中获取某些提交


151

我需要从GitHub下载Facebook API 。通常,我只是单击“下载”选项卡以下载最新的源代码。在这种情况下,我需要一个较旧的提交:91f256424531030aa454548693c3a6ca49ca3f35a,但我不知道如何从该提交中获取整个项目...

有人可以告诉我该怎么做吗?

(顺便说一句,在Mac上是即时消息。不知道那有什么区别)。


1
如果您“仅”需要“压缩快照代码”,也请参见stackoverflow.com/questions/13636559/…
Jean Fontaine

Answers:


216

首先,使用git克隆存储库,例如:

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

这将下载存储库的完整历史记录,因此您可以切换到任何版本。接下来,更改为新克隆的存储库:

cd facebook-ios-sdk

...并用于git checkout <COMMIT>更改为正确的提交:

git checkout 91f25642453

这将给您一个警告,因为您不再在分支上,而直接切换到特定版本。(这被称为“分离的HEAD”状态。)由于听起来好像您只想使用此SDK,而不是积极地开发它,因此您无需担心,除非您有兴趣找出答案。有关git如何工作的更多信息。


4
此时,您也git export可以只需要文件。
Xeoncross 2012年

1
git checkout -q <commit#>在git checkout期间使警告stderr静音。
Manavalan Gajapathy

当我执行git checkout 441b034635240bc873700473af3e98533e94a0b5时,出现错误:致命:引用不是树:441b034635240bc873700473af3e98533e94a0b5
ttb

135

我不知道您发布此问题时它是否在那里,但是下载提交的最佳和最简便的方法是在查看存储库时单击“ 提交”选项卡。然后,不要单击提交名称,而要单击提交名称/消息右侧带有<>符号的“历史记录”按钮,然后单击“ 浏览存储库”,最后单击“ 克隆”或下载”按钮。下载按钮。

希望对您有帮助。


3
这是恢复“丢失的提交”的唯一方法,这些“丢失的提交”是github确实有历史但已从“官方” git时间轴中删除的提交。使用此功能,您可以获取已被遗忘的提交的zip快照,将该提交推到新分支,将该分支提取到现有的存储库中,然后将其重新整理。
Ajax

@Ajax不对。您仍然可以使用来获取sha git reflog,然后检出分离的提交
Aaron Brager

@AaronBrager当然,如果您位于最初进行提交的同一台计算机上,则reflog可以正常工作。OP已经知道提交,因此他们不需要reflog,可以直接检出。但是,我正在谈论的情况是您在本地没有提交,并且不在公共回购中的任何分支上。在这些情况下,github可能仍会保留该提交的记录,您可以将其下载为zip以便恢复该提交。
阿贾克斯

@Ajax啊,感谢您的澄清。作为替代方案,您可以访问GitHub API(api.github.com/repos/facebook/facebook-ios-sdk/events),然后从孤立的提交(此处的说明)创建分支
Aaron Brager

非常好。+1我不知道您可以像这样查询github的reflog!
阿贾克斯

27

西凡的gif答案 在此处输入图片说明

1.单击github中的提交

2.选择每个提交右侧的浏览代码

3.单击下载zip,它将在提交时下载源代码


您好suraj您能告诉我您是如何创建屏幕gif的吗?
Rahul Satal

使用快速播放器录制屏幕视频。使用任何可用工具将视频转换为gif。Googleit。@ Rahul Satal
Suraj K Thomas

1
感谢@SurajKThomas提供的gif
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. 打开提交(URL:github.com/org/repo/commit/long-commit-sha)
  2. 点击右上角的“浏览文件”
  3. 单击左上方的下拉列表“ Tree:short-sha ...”
  4. 输入新的分支名称
  5. git pull 新分支到本地

这个答案比公认的答案更笼统。我遇到这种情况,我想要的提交已经在master分支上消失了,Github不会将每个提交都保留在不存在的分支上。因此,此方法将根据Github上的提交创建一个新分支,并使它可拉。
齐罗

这使我可以从删除的执行PR的派生中恢复提交(具有完整的原始SHA)。创建新的派生后,我在上游仓库上打开了PR提交,然后执行了“浏览文件”。然后,我复制了该URL,并用我自己的用户名替换了用户名。然后单击Tree:下拉菜单,并在我的fork中创建一个新分支。很棒!
艾伦·卢斯

2

问题标题不明确。


1

除了可接受的答案之外:

要查看散列,您需要使用建议的命令“ git checkout hash ”,您可以使用git log。但是,根据您的需要,有一种比复制/粘贴哈希更简单的方法。

您可以git log --oneline用来阅读更多压缩格式的提交消息。

假设您看到的是提交的单行列表,其中包含最少的信息并且仅部分可见的哈希值:

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将为您提供commit 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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.