2017-03-23 2 views
0

나는 GitHub에서 프로젝트를 포크했다. 어떻게 작동하는지 이해하기 위해 (나중에 기여하기 위해) 나는 시간을 거슬러 올라가고 싶다. 첫 번째로 커밋 된 내용을 확인한 다음 각 단계에서 repo를 탐색하고 이전 커밋과 diff를 보는 방식으로 차례로 끌어옵니다.Git - 시작부터 코드를 풀다. ​​커밋 후 커밋한다.

그래서 기본적으로, 나는 세 가지를 수행하는 방법을 알고 있어야합니다

  • REPO의 초기 상태로 이동을
  • 하나 그냥, 내가 코드를 편집 할 필요가 없습니다 (커밋 풀
  • 커밋이 사이의 DIFF을 확인하고 이전

가 나는 후자에 대한 git diff HEAD~1처럼 뭔가를 할 수 있으리라 믿고있어)를 볼 수 있습니다. 그러나 나는 두 가지 다른 것들을 어떻게 처리해야하는지, 특히 첫 번째 것을 어떻게 처리해야할지 모릅니다.

+0

GitHub Desktop 또는 SouceTree와 같은 Git GUI 프로그램을 사용하여 최신 커밋을 가져올 수 없습니까? 최신 커밋 전에 만들어진 모든 단일 커밋을 쉽게 볼 수 있습니까? 각 커밋은 이전 커밋과 관련하여 해당 커밋의 모든 변경 사항을 표시합니다. –

+0

그래, 그렇긴하지만 주어진 시간에 전체 레포를 탐색하는 것은 꽤 어려울 것입니다. 나는 변화를 보았을 뿐이지 만 전체 상황을 아는 것은 아니다. – pie3636

답변

2

Any Git GUI - gitk, GitUp, GitKraken, GitHub Desktop 등 - 원하는 것을 수행 할 수 있어야합니다. 메인 라인 브랜치를 선택하고 처음으로 다시 스크롤하십시오. 그런 다음 각 커밋을 선택하면 커밋의 diff와 이전 커밋의 차이가 표시됩니다.

행운을 빈다.

+1

리눅스에서는 개인적으로'qgit'를 선호합니다.'t'는 * 파일 트리 *를 보여줍니다. 그러면 시간을 거슬러 올라가고 모든 커밋을 쉽게 검사 할 수 있습니다 . – Unapiedra

2

git diff을 diff하고 싶은 분은 git diff sha1 sha2과의 차이점을 확인하는 데 사용할 수 있습니다. 특정 커밋에 대한 로컬 레포를 얻고 싶다면 get reset <sha> --hard 일 뿐이고, 맨 위 커밋은 사용자가 지정한 sha가됩니다. 작업이 끝나면 리모컨을 다시 당겨 원격 마스터와 동기화하여 로컬 복사본을 가져올 수 있습니다.

2

"pull"이라는 단어는 Git에서 특별한 의미가 있습니다. (그리고 실제로 질문과 관련이 없지만 git pull을 사용하지 않는 것이 좋습니다. git fetch과 두 번째 Git 명령을 사용하는 것이 좋습니다. 이는 git pull이 당신을 대신하는 것입니다. 그게 바로 입니다. 두 번째 명령 당신이 git fetch에있어 무엇에 따라 달라집니다, 그래서 git pull 때로는 잘못된 하나를 실행 수)

당신이 원본과 저장소 - 이러한 액세스가 있으면.; 이를 포크 할 필요는 없으며, 이것은 실제로 상처를 입히는 것이 아닙니다. 적절한 Git 클라이언트를 사용하여 로컬 머신에 git clone해야합니다. 이렇게하면 로컬에있는 모든 것을 모두 복사 할 수 있습니다. 이제 임의의 주어진 커밋을 추출하기 위해 git checkout을 사용하고 커밋을 보려면 git log을 사용하여 (또는 gitk 또는 일부 GUI를보고, 경우에 따라 git checkout, 그 커밋을 사용하여) 모든 것을 자유롭게 탐색 할 수 있습니다.

+0

글쎄요, 나중에 복제 요청을하고 기고하고 싶기 때문에 복제 대신 포크로 찍었습니다. checkout과 git log를 사용할 때의 문제점은 수백 가지 커밋이 있다는 것입니다. 따라서 전체 로그를 스크롤해야하는 것은 약간 지루한 작업입니다. 따라서 앞으로 커밋을 한 번만 진행하는 방법이 있는지 궁금합니다. – pie3636

+1

예, 아마도 그 목적을 위해 나중에 포크를 원할 것입니다. Git에서 한 커밋을 앞으로 옮기는 것은 어렵다. * 뒤로 이동하는 것이 훨씬 쉽다. (나중에 커밋에서 이전 커밋으로 옮기기). 첫 번째 커밋을 찾으려면 마지막으로 표시된 바로 가기로 이동하십시오. 리눅스 셸에서'git log' 명령을 사용하려면 다른 리눅스 도구 중 일부를 사용하십시오 :'git log --oneline | 예를 들어 꼬리. (더 많은 도구가 있지만 시작할 수 있습니다.) – torek

1

torekJamie의 답은 귀하의 질문에 더 적절합니다. 그러나, 정말로 원한다면 각 커밋에 대해 diff/패치를 쉽게 생성 할 수 있습니다.

정말로 원한다면 모든 커밋에 대한 패치를 생성 할 수 있습니다.

git format-patch $(git rev-list --max-parents=0 HEAD)..HEAD 

이렇게하면 두 번째 커밋에서 마지막 커밋까지 하나의 "패치"파일이 만들어집니다. 그런 다음 각 커밋을 개별적으로 검사 할 수 있습니다.