특정 개정으로 이동


581

특정 프로젝트의 자식 저장소를 복제했습니다. 파일을 초기 상태로 돌릴 수 있고 파일을 검토 할 때 개정 2, 3, 4 ... 가장 최근 항목으로 이동합니까? 프로젝트가 어떻게 발전하고 있는지에 대한 개요를 갖고 싶습니다.

답변:


874

git checkout <sha1>특정 커밋을 체크 아웃하는 데 사용 합니다.


2
당신은 이것을 할 수 있습니다 git log -n1. 그러나 git checkout실패 하지 않으면 노력의 낭비입니다.
Marcelo Cantos

2
효과가있다. 나는 전체 sha1 (부분이 아님)을 사용해야했습니다. 그리고 프로젝트를 두 번째 개정으로 바꾸고 싶다면? git log이제 첫 번째 커밋 만 표시합니다. 다음 커밋의 sha1을 찾을 수 있습니까?
xralf

6
고유성을 보장하기 위해 sha1 만 사용하면됩니다. 아마도 우연의 일치가 있었을 것입니다. Git은 "다음"커밋에 대한 개념이 없다. history는 모든 화살표가 거꾸로 가리키는 DAG입니다. git log --oneline참조를 위해 출력을 텍스트 파일로 실행 하고 붙여야합니다 (축약 된 sha1 합계는 고유 한 것으로 보장됩니다). 당신의 역사는 선형 경우 또 다른 옵션은,의 처음까지 커밋에서 얼마나 많은 커밋 파악하는 것입니다 master사용 git checkout master~543후, (543 개 커밋이있는 경우) git checkout master~542
마르셀 칸토

19
"git checkout <sha1>"에서 현재 커밋으로 다시 체크 아웃하는 방법은 무엇입니까?
쿠스

6
@AlexanderSupertramp 지점을 체크 아웃하십시오.
Marcelo Cantos 2016 년

50

특정 버전 / 커밋으로 이동하려면 다음 명령을 실행하십시오. 당신이 얻을 수있는 해시 코드git log --oneline -n 10

git reset --hard HASH-CODE

– 특정 버전 / 커밋으로 재설정 한 후 git pull --rebase폐기 된 모든 커밋을 다시 가져 오려면을 실행할 수 있습니다 .


1
A가 있습니다 reset만 그것은 또한 이동 그래프에서 특정 지점을 체크 아웃하지 않는 현재 지점 체크 아웃
리암

또한으로 reset보류중인 모든 변경 사항이 삭제됩니다.
WilliamKF

2
--hard 플래그는 해시 후에 커밋을 삭제합니다 .... 아마도 작은 tid 비트를 여기에 추가하려고합니다. 나는 사람들이 역사를 잃어 버렸다고 확신하고 이유를 궁금해했다.
Urasquirrel

git pull --rebase당신이 당신의 repo에 대한 원격이있는 경우에만 작동 이 최신입니다.
Keith Thompson

19

와 같은 도구를 사용하여 프로젝트 히스토리를 그래픽으로 볼 수 있습니다 gitk. 그냥 실행 :

gitk --all

특정 지점을 체크 아웃하려면 다음을 수행하십시오.

git checkout <branch name>

특정 커밋의 경우 분기 이름 대신 SHA1 해시를 사용하십시오. (참조 Treeishes 에서 힘내 커뮤니티 도서 좋은 읽기입니다, 당신의 나무를 탐색하기위한 다른 옵션을 볼 수 있습니다.)

git log 상세 내역이나 요약 내역도 표시 할 수있는 전체 옵션 세트가 있습니다.

나는 이동하기 쉬운 방법을 알고하지 않습니다 앞으로 커밋 역사. 선형 이력이있는 프로젝트는 그다지 흔한 것은 아닙니다. SVN 또는 CVS와 같은 "개정"이라는 아이디어는 Git에서 모든 것을 잘 매핑하지 못합니다.


2
주의 : git은 프로젝트의 단일 선형 이력을 제공함으로써 거짓말을하지 않습니다. 프로젝트가 실제로 그런 방식으로 발전하지 않았다면 그렇지 않습니다.
Andres Jaan Tack

커밋은 "미래"를 참조하지 않기 때문에 앞으로 나아가는 것은 논리적으로 의미가 없습니다 (선형 기록에서도). 기껏해야 해당 커밋이있는 모든 커밋을 부모로 식별 할 수 있습니다. 뒤로 이동하는 것은 합병으로 인한 사소한 운동이 아닙니다.
Marcelo Cantos

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. 자식 초기화
  2. git clone 이 명령 후에는 마스터 브랜치에있게됩니다. 원하는 지점으로 전환
  3. 자식 체크 아웃 17.0 커밋이있는 지점으로 이동합니다
  4. git checkout 이것은 해시 커밋까지 저장소를 가져옵니다. 커밋 해시 번호로 변경 된 ur 분기의 이름을 참조하십시오. 이제이 해시에 지점 이름을 지정하십시오.
  5. 자식 분기 ABC 로컬 컴퓨터에 새 분기를 만듭니다.
  6. 자식 체크 아웃 ABC
  7. git push origin ABC git push origin ABC 이 분기를 원격 저장소로 푸시하고 git 서버에 분기를 만듭니다. 끝났습니다.

1

한 가지 방법은 패치에 대한 모든 커밋을 만드는 것입니다. 초기 커밋을 확인한 다음 읽은 후 순서대로 패치를 적용하십시오.

사용 git format-patch <initial revision>git checkout <initial revision>. 감독은 4 자리 숫자로 시작하여 파일 더미를 가져와야합니다.

개정판을 다 읽었을 때 git apply <filename>어떤 모양 git apply 0001-*과 계산이 필요한지 확인하십시오.

그러나 왜 패치 자체를 대신 읽고 싶지 않을까요? 궁금해서 의견을 적어주십시오.

자식 매뉴얼도 나에게 이것을 제공합니다 :

git show next~10:Documentation/README

다음 지점의 마지막 10 번째 커밋에서 현재 상태 인 Documentation / README 파일의 내용을 표시합니다.

또한 git blame filename각 줄이 커밋 해시 + 작성자와 관련된 목록을 제공합니다.


1

커밋 된 특정 코드를 얻으려면 해당 커밋 의 해시 코드필요합니다 . 해시 코드는 두 가지 방법으로 얻을 수 있습니다.

  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를보고 있습니다).

  • 자식 체크 아웃 "commmitHash"

커밋에서 잔인하게 다시 시작하고 나중에 엉망이 된 지점을 삭제하십시오.

  • git reset --hard "commmitHash"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.