GitHub 프로젝트에서 특정 커밋을 얻는 방법


151

GitHub 에서 Facebook API를 다운로드해야합니다 . 일반적으로 최신 소스 코드를 다운로드하려면 '다운로드'탭을 클릭하면됩니다.이 경우, 이전 커밋이 필요합니다 : 91f256424531030a454548693c3a6ca49ca3f35a .

누군가이 작업을 수행하는 방법을 알려주십시오.

(BTW, 맥에서 메신저. 그것이 어떤 차이가 있는지 모르겠다).


1
stackoverflow.com/questions/13636559/… 를 참조하십시오. "만" "zip-snapshot-code"가 필요한 경우.
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를 적극적으로 개발하지 않고 사용하려는 것처럼 들리므로, 관심이 없다면 걱정할 필요가 없습니다. git 작동 방식에 대해 자세히 알아보십시오.


4
이 시점 git export에서 파일을 원할 수도 있습니다.
Xeoncross

1
git checkout -q <commit#>git checkout 동안 경고 stderr를 침묵시킵니다.
Manavalan Gajapathy

git checkout 441b034635240bc873700473af3e98533e94a0b5를 수행하면 오류가 발생합니다. 치명적인 : 참조는 나무가 아닙니다 : 441b034635240bc873700473af3e98533e94a0b5
ttb

135

이 질문을 게시했을 때 거기에 있었는지 모르겠지만 커밋을 다운로드하는 가장 쉽고 쉬운 방법 은 리포지토리를 볼 때 커밋 탭 을 클릭 하는 것입니다. 대신 커밋 이름을 클릭의 그런 다음을 클릭합니다 역사의이 시점에서 찾아보기 저장소 와 버튼 <> 커밋 이름 / 메시지의 오른쪽 기호, 마지막에 다운로드 우편 클릭 할 때 오는 버튼 복제 또는 다운로드 버튼.

도움이 되길 바랍니다.


3
이것은 github에 히스토리가 있지만 "공식적인"git 타임 라인에서 지워진 커밋 인 "lost commits"를 복구하는 유일한 방법입니다. 이를 사용하면 망각에 기반을 둔 커밋의 zip 스냅 샷을 가져 와서 해당 커밋을 새 브랜치에 푸시하고 해당 브랜치를 기존 리포지토리로 가져 와서 다시 선택합니다.
Ajax

@Ajax 사실이 아닙니다. 여전히 git reflog
Sha를 사용

@AaronBrager는 처음에 커밋을 한 컴퓨터와 동일한 컴퓨터에 있다면 reflog가 작동합니다. OP는 커밋을 이미 알고 있으므로 재 로그를 필요로하지 않고 바로 체크 아웃 할 수 있습니다. 그러나 나는 커밋이 로컬에 없으며 공개 리포지토리에있는 지점에없는 경우에 대해 이야기하고 있습니다. 이 경우 github에 여전히 커밋 레코드가있을 수 있으며,이 커밋을 복구 할 수 있도록 zip으로 다운로드 할 수 있습니다.
Ajax

@Ajax Ah, 설명해 주셔서 감사합니다. 대안으로, GitHub API ( api.github.com/repos/facebook/facebook-ios-sdk/events )를 치고 고아 커밋에서 분기를 만들 수 있습니다 ( 여기에서 지침 )
Aaron Brager

아주 좋아요 +1 나는 당신이 github의 reflog를 쿼리 할 수 ​​있다는 것을 몰랐다!
Ajax

27

Sivan의 답변 (gif) 여기에 이미지 설명을 입력하십시오

1. github에서 커밋을 클릭하십시오.

2. 각 커밋의 오른쪽에서 코드 찾아보기를 선택하십시오.

3. zip 다운로드를 클릭하면 커밋 시점에 소스 코드가 다운로드됩니다.


안녕하세요 suraj 어떻게 화면의 GIF를 만들 었는지 말해 주실 수 있습니까?
Rahul Satal

그것은 .Google 사용 가능한 도구를 사용하여 GIF로 비디오 screen.Do 변환의 비디오를 녹화하기 위해 빠른 시간 플레이어를 사용 @ 라훌 Satal.
SURAJ K 토마스

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. 커밋을 열어 두십시오 (url : github.com/org/repo/commit/long-commit-sha)
  2. 오른쪽 상단의 "파일 찾아보기"를 클릭하십시오
  3. 왼쪽 상단의 '나무 : 짧음 ...'드롭 다운을 클릭하십시오.
  4. 새로운 지점 이름을 입력하십시오
  5. git pull 새로운 지점을 로컬로

이 답변은 허용되는 것보다 더 일반적입니다. 나는 원하는 커밋이 이미 마스터 브랜치에서 사라지고 Github이 기존 커밋이 아닌 브랜치에서 모든 커밋을 유지하지는 않는 상황을 만났습니다. 따라서이 접근법은 Github의 커밋에서 새 브랜치를 생성하고 풀 가능하게 만듭니다.
Qi Luo

이렇게하면 PR을 수행 한 삭제 된 포크에서 커밋 (원래 SHA 그대로)을 복구 할 수 있습니다. 새 포크를 만든 후 업스트림 리포지토리에서 PR 커밋을 연 다음 "파일 찾아보기"를 수행했습니다. 그런 다음 해당 URL을 복사하고 사용자 이름을 내 것으로 바꿨습니다. 그런 다음 Tree : 드롭 다운을 클릭하고 포크에 새 분기를 만들었습니다. 잘 했어!
Allen Luce

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 Help , 키보드 바로 가기 )를 눌러 현재 개정 / 커밋에 대한 "퍼머 링크"를 얻을 수도 있습니다.
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
이것은 위험합니다. repo를 복제하고 버전을 체크 아웃하는 것이 더 합리적입니다
user1767754
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.