Git 문제해결 가이드
flight rules가 뭐예요?
뭔가 잘못됐을 때 뭘 해야 할지에 대한 우주비행사(여기선 Git을 쓰는 개발자)를 위한 가이드
Flight Rules 는 어떤 문제가 발생한 이유와 그 단계의 매뉴얼에서 어렵사리 얻은 지식입니다. 기본적으로 각 시나리오의 매우 자세하고 구체적인 운영 절차랍니다. [...]
NASA는 수성(Mercury) 시대 때 지상팀에서 처음으로 "lessons learned"란 것을 모았는데 수천 개의 문제의 상황들, 부서진 해치 손잡이로 인한 엔진 고장부터 컴퓨터 문제 그리고 그 해답까지, 1960년대 초부터 우리의 실수들, 재앙들, 해결책 등이 목록화되어있습니다.
— Chris Hadfield, 인생을 위한 우주비행사의 가이드.
이 문서의 규칙
명확하게 하기 위해 이 문서의 모든 예제는 현재 브랜치를 표시하고 스테이지에 변경이 있는지를 나타내기 위해 커스텀 된 배시 프롬프트를 사용합니다. 브랜치는 괄호 안에 있고, 브랜치 다음의 *는 스테이지의 변경된 것을 나타냅니다.
리포지터리
로컬 리포지터리에서 시작하기
이미 존재하는 프로젝트 디렉터리를 Git 리포지터리로 최적화해 쓰려면 다음과 같이 입력합니다.
(my-folder) $ git init
리모트 리포지터리를 복제해오기
리모트 리포지터리를 클론하려면, 리포지터리 URL을 복사해와서 실행합니다.
$ git clone [url]
폴더 이름이 리모트 리포지터리 이름과 같이 저장됩니다.
복제할 리모트 서버의 연결을 확인하세요. (대부분 인터넷 연결을 확인하란 뜻입니다)
다른 리포지터리 이름으로 복제를 해오고 싶다면 다음 명령어를 실행합니다.
$ git clone [url] 새-폴더-이름
커밋 수정
최근 남긴 커밋 확인하기
git commit -a
로 막 커밋을 남긴 후에 커밋 메시지를 확인하고 싶다면 최근의 커밋을 현재 HEAD에서 볼 수 있습니다.
(main)$ git show
또는
$ git log -n1 -p
만약 특정 커밋의 파일을 보고 싶다면, 이렇게 할 수도 있습니다. (commitID는 확인하고자 하는 그 커밋입니다)
$ git show <commitid>:filename
커밋 메시지를 잘못 썼을 때
만약 메시지를 잘못 썼고 아직 푸시를 안 했다면, 커밋 메시지 바꾸기를 따라 해보세요.
$ git commit --amend --only
이 방법은 편집 가능한 기본 텍스트 에디터가 열릴 텐데요, 다른 방법으론 한 줄에 쓸 수도 있습니다.
$ git commit --amend --only -m 'xxxxxxx'
만약 푸시를 이미 했다면, 커밋을 수정해서 강제 푸시를 할 수 있긴 한데 별로 추천하는 방법은 아닙니다.
커밋을 원하지 않는 이름과 이메일 설정으로 해버렸을 때
하나의 커밋이라면 이렇게 수정합니다.
$ git commit --amend --no-edit --author "이름 <이메일>"
대안으로 git config --global author.(이름|이메일)
에서 설정을 다시 맞추고 다음 명령을 실행하는 방법도 있습니다.
$ git commit --amend --reset-author --no-edit
만약 전체 이력 변경이 필요하다면, git filter-branch
의 설명 페이지를 보세요.