📥 Github 설치하기

1. Github 기본 명령어

1) local repository용

  • git init : 새로운 저장소 만들기
  • git clone [원격 저장소 URL] : 저장소의 모든 파일들을 가져오기만 함
    • git clone -b [브랜치명] [원격 저장소 URL]: 특정 브랜치를 clone
  • git add [추가할 파일명] : 커밋할 파일을 stage(커밋하기 위한 준비 상태에 돌입) 시켜줍니다
    • -update : 추적하고 있는 파일만 add
  • git rm [삭제할 파일명] : 제거 관련 명령어
    • -cached : 해당 파일을 working directory 상태로 되돌림
      (Git 저장소에서만 삭제하고 실제 파일은 남겨두고 싶은 경우)
  • git commit -m "[커밋 메시지]" : commit 메시지와 함께 commit
  • git commit --ammend : commit 메세지 변경
  • git status : git 상태 확인
  • git log : commit 목록 확인

2) local repository ↔ remote repository

  • git remote : local repository에 연결된 remote repository를 확인
  • git remote add [별칭] [remote repository URL 주소] : 원격 저장소 등록
  • git remote show [원격 저장소명] : 원격 저장소 정보
  • git push [원격 저장소명] [원격 branch명] : branch 명에는 master 혹은 develop 등의 본인이 만든 branch의 이름을 넣어 주세요
  • git push [원격 저장소명] [원격 branch명] : branch 명에는 master 혹은 develop 등의 본인이 만든 branch의 이름을 넣어 주세요
  • git pull [원격 저장소명] [원격 branch명]: local repository와 비교하여 병합을 하고, local repository에 저장( add )까지 수행
    • git pull = git fetch + git merge

3) master ↔ branch

  • git branch : 브랜치의 목록과 현재 사용하고 있는 브랜치를 확인
  • git branch [branch] : 브랜치 생성
    • -r [branch] : remote repository 브랜치 목록 확인
    • -a [branch] : local / remote repository 모두의 브랜치 목록 확인
    • -D [branch] : local repository 브랜치 삭제
  • git checkout [branch] : 브랜치를 이동
  • git checkout -b [branch] : 브랜치 생성 후, 그 브랜치로 이동
  • git fetch : local repository에서 remote repository와 동기화하는 역할(업데이트)
  • git merge [브랜치] : 현재 checkout 하고 있는 branch로 [branch]에서 병합
  • git checkout master git merge develop # develop --merge-> master

branch를 merge 할 때는 같은 파일을 수정할 경우 생길 수 있는 충돌 발생을 항상 주의해야 합니다.

2. Github 취소 명령어

1) git add 취소하기

git reset HEAD [파일명] : git add 한 [파일] 취소, 수정된 워킹 디렉터리의 파일은 보존

git reset HEAD : git add한 [파일 전체] 취소, 수정된 워킹 디렉터리의 파일은 보존

2) commit 취소하기

  • git reset HEAD^ : commit 취소 (위와 동일)
  • git reset HEAD~2 : 마지막 commit 2개 취소.
  • git reset [commit_id] : git add를 한 상태에서, 변경된 staging area를 무효화 (수정된 내용은 유지)
    • git reset --soft [commit_id] : [commit_id]으로 되돌림. staged 상태, 워킹 디렉터리의 파일 보존.
    • git reset --soft HEAD^ : 직전 commit 취소. staged 상태, 워킹 디렉터리의 파일 보존.
    • git reset --mixed [commit_id] : [commit_id]으로 되돌림. unstaged 상태, 워킹 디렉터리의 파일 보존
    • git reset --mixed HEAD^ : 직전 commit 취소. unstaged 상태, 워킹 디렉터리의 파일 보존(기본 옵션)
    • git reset --hard [commit_id] : [commit_id]으로 되돌림. unstaged 상태, 워킹 디렉터리의 파일 삭제. 즉 모두 취소.
    • git reset --hard HEAD^ : 직전 commit 취소. unstaged 상태, 워킹 디렉터리의 파일 삭제. 즉 모두 취소.

3) git push 취소하기

주의 사항

  1. local의 내용을 remote에 강제로 덮어쓰기를 하는 것이기 때문에 주의.
  2. 되돌아간 commit 이후의 모든 commit 정보가 사라지기 때문에 주의.
  3. 협업 프로젝트에서는 동기화 문제가 발생할 수 있으므로 주의
  • 방법 1
    • 과정
      1. 워킹 디렉터리에서 commit을 되돌린다 →
      2. 되돌려진 상태에서 다시 commit을 한다 →
      3. 원격 저장소에 강제로 push 한다.
    • 명령어 순서
      1. git reset HEAD^ / git reset [버전명]
      2. git commit -m "변경한 메시지"
      3. git push origin +[branch] : 해당 branch를 원격 저장소에 강제로 push ('+' 붙여야 함)
      4. git push origin [branch ] -f : 해당 branch를 원격 저장소에 강제로 push
  • 방법 2
    • git revert [commit_id] : 해당 커밋만을 되돌림
    • git revert [commit_id1..commit_id2] : 해당 범주의 커밋을 모두 되돌림

4) git merge 취소하기

  • git reset -merge ORIG_HEAD
    • master와 child 두 브랜치가 있을 때, master 브랜치에서 child 브랜치를 병합하려고 했는데 병합을 하면 안 되는 작업이었던 것이 었다면, 이 경우에 병합을 한 후, 바로 병합을 취소
    • 병합은 위험한 작업이기 때문에 Git은 병합을 하기 전에, 최신 커밋에 포인터를 지정( ORIG_HEAD )합니다.
    • 따라서 방금 병합한 것을 되돌리려면 -merge 옵션과 ORIG_HEAD 포인터를 지정하여 reset 명령어를 실행하면 됩니다.
  • git revert --mainline 1 {취소할 병합 커밋 ID}
    • revert의 --mainline 옵션을 사용해서 병합을 취소할 수 있습니다.
    • mainline이란 병합을 취소한 후에, 어느 라인을 기준으로 되돌아갈 것인지 기준을 정하는 것입니다.
    • 명령어를 실행하면 편집기 창이 나오면서 커밋 메시지를 작성하라고 합니다.

5) git reset VS git revert

  • 단순하게 되돌릴 시점 이후의 commit을 전부 날리고 remote repository에 강제로 push 하여 되돌리려면 reset을 사용하면 된다 - commit history를 단순하게 만들어 준다

이미 원격 리파지토리에 push를 한 상태라면 reset을 사용하면 reset 하기 이전으로 되돌리기 전까지는 push 할 수 없게 됩니다. (물론 force라는 무시무시한 옵션이 있기는 합니다. )

따라서, 여러 문서들에서는 이미 push 한 코드에 대해서는 revert를 사용할 것을 추천하고 있네요...ㅎㅎ (정확하지 않습니다.)

  • 하지만 이력 중간에 로그 출력하도록 한 커밋이 있고 그 커밋만을 취소하려고 한다면 revert를 사용하여 해당 커밋의 내용만 되돌릴 수 있다.

3. 협업용 github 사용

1. upstream에 대한 이해

  • git remote add upstream [remote repository URL 주소] : upstream [주소] remote
  • git branch -r : -r 붙이면 원격 저장소의 branch list 확인
  • git branch -v
  • git fetch upstream : upstream 저장소에 있는 변경사항들을 로컬로 가져오면서 새로운 branch 생성
  • git checkout [master] : [내 브랜치]로 현재 가리키는 branch 업데이트
  • git merge [upstream/develop] : [upstream/develop]을 내 현재 branch로 merge(동기화)
  • git push [origin] [branch] : 내 원격 repo로 push 해주면 끝

2. PR (Pull Request)

  1. upstream repository를 내 repository에 동기화하는 경우
    • 이렇게 upstream repository와 동기화 한 내 레포를 upstream 레포로 PR을 보냄
    • upstream에서 conflict가 없을 시 PR 승인
    • 다른 협업자들은 본인의 변경사항으로 PR 하기 전에 다시 1. 의 과정을 통해 본인의 레포를 upstream의 레포와 동기화한 후 PR
  2. upstream repository에 내 변경사항만 추가하고 싶은 경우
    • upstream과 동기화를 하지 않고, 협업자와 다른 파일만을 건든다면 fetch, merge 없이 PR 가능

더 알고 싶은 분은...

참고 및 출처:
[전체적인 git 명령어 참고](https://victorydntmd.tistory.com/category/Git/%EA%B0%9C%EB%85%90%EA%B3%BC%20%ED%99%9C%EC%9A%A9?page=2)
[reset, revert 사용하는 시점 참고](https://medium.com/nonamedeveloper/%EC%B4%88%EB%B3%B4%EC%9A%A9-git-%EB%90%98%EB%8F%8C%EB%A6%AC%EA%B8%B0-reset-revert-d572b4cb0bd5)

+ Recent posts