[Git] Git 명령어 정리

김진회·2023년 1월 4일
0

git

목록 보기
3/3

* 넣어야 하는 값은 <> 안에 표기했습니다.

1. 계정 설정

1) 전역 유저이름 / 이메일 설정하기

git config --global user.name <유저이름>
git config --global user.email <이메일>

2) 전역 설정 정보 조회

git config --global --list

2. 깃 추가하기/가져오기

1) 초기화 및 생성 / 복제하기 / 원격 저장소 추가

git init
git clone <저장소 주소>
git remote add <원격 저장소> <저장소 주소>

3. 자주 사용하는 명령어

1) 브랜치 확인하기 및 생성 / 삭제

git branch // 지역 브랜치 목록 보기
git branch -r // 원격 브랜치 목록 보기
git branch -a // 모든 브랜치 목록 보기
git branch <브랜치명> // 현재 브랜치에서 새로운 브랜치 생성하기
git branch <새로운 브랜치명> <생성 위치> // 다른 지점에서 브랜치 생성하기
git branch -d <삭제할 브랜치> // 브랜치 삭제하기

2) 브랜치 이동하기

git checkout <브랜치명> // 체크아웃하기 (해당 브랜치로 이동하기)
git checkout -m <기존 브랜치> <새로운 브랜치> // 브랜치를 옮기거나 이름 바꾸기

3) 원격 저장소에서 변경 사항을 가져와 현재 브랜치에 병합하기

git pull <원격 저장소> // ex. git pull origin
git pull  // = git pull origin

4) 원격 저장소에서 변경 사항 가져오지만 병합은 하지 않기

git fetch <원격 저장소>
git fetch // = git fetch origin

5) 파일 추가하기

git add <파일>   // ex. git add .

6) 상태 확인하기

git status

7) 커밋하고 푸시하기

git commit -m "<메세지>"
git push <원격저장소> <지역브랜치>// 지역브랜치를 동일이름의 원격브랜치에 푸싱하기 
                                  ex. git push -u origin

8) 병합하기

git merge <브랜치> // 다른 브랜치를 현재 브랜치로 병합하기
git merge --no-commit <브랜치> // 커밋하지 않고 병합하기
git merge --squash <브랜치> // 브랜치의 이력을 다른 브랜치에 합치기
git merge --abort // 병합 취소하기

9) 원격 브랜치 제거하기

git remote prune <원격 저장소> // 원격 브랜치 제거하기
git remote rm <원격 저장소> // 관련된 브랜치를 포함해서 원격 브랜치 제거하기

4. 그 외 명령어

1) 깃 이력 보기

git log // 모든 로그 보기
git log -p // 변경 사항을 보여주는 패치와 함께 로그 보기
git log -10 // 로그 10개만 보기
git --since="12 hours" // 12시간 내의 커밋 로그 보기
git log --name-status // 커밋할 시점의 파일 상태 보기

2) 차이점 보기

git diff // 현재 작업 트리와 인덱스의 차이점 보기
git diff HEAD // 작업 트리와 저장소의 차이점 보기
git diff <시작 지점> // 작업 트리와 특정 위치 간의 차이점 보기
git diff <시작 지점> <끝 지점> // 저장소의 두 지점 사이의 차이점 보기

3) 다른 계정의 git으로 저장소를 이동 시킬 때, commit 이력까지 이동 시키기

git clone --mirror <기존 저장소 주소>
cd <기존 저장소명>.git
git remote set-url --push origin <신규 저장소 주소>
git push --mirror

5) 베이스를 다시 설정하는 작업

git rebase <base가 될 브랜치> // 현재 브랜치의 base를 다른 브랜치로 바꾸기

5. 비슷한 명령어 비교

1) Pull vs Fetch

👉 파일을 다운 후, 병합을 진행하는지의 차이

  • Pull
    • 원격 저장소로부터 필요한 파일을 다운 후, 병합
    • 지역 브랜치와 원격 저장소 origin/master가 같은 위치를 가르킨다.
  • Fetch
    • 원격 저장소로부터 필요한 파일을 다운 👉 병합은 따로 해야 함
    • 보통 신중할 때 사용한다.
    • 사용하는 이유?
      • 원래 내용과 바뀐 내용과의 차이를 알 수 있다.
        👉 git diff HEAD origin/master
      • commit이 얼마나 됐는지 알 수 있다.
        👉 git log --decorate --all --oneline
      • 이런 세부 내용 확인 후 git merge origin/master하면 git pull과 같아진다. (병합까지 완료)

2) Clone vs Fork

👉 원본 저장소와 연결이 되어있는지, 복제 저장소와 원본 저장소가 서로 변경사항을 반영할 수 있는지

  • Clone
    • 특정 원격 저장소를 복제하여 새로운 저장소를 만든다.
    • 권한이 없는 경우 원격 저장소에 변경사항이 반영되지 않는다.
  • Fork
    • 다른 사람의 원격 저장소에 내가 어떤 부분을 수정하고 싶을 때 해당 저장소를 내 저장소로 복제하는 기능
    • 원본 저장소의 변경 사항을 내 저장소에 반영할 수 있다. 복제 저장소와 원본 저장소는 연결되어 있다. 이 때, fetch나 rebase의 과정이 필요하다.
    • 내 저장소에서 작업을 진행한 후, 변경 사항을 원본 저장소에 적용하고 싶으면 해당 저장소에 PR(Pull reques)을 해야 한다. 관리자로부터 승인되면, 나의 변경 사항이 원본에도 반영된다.

3) Merge vs Rebase

👉 커밋의 순서를 바꾸는지의 차이. Rebase를 하면 히스토리를 깔끔하게 할 수 있지만 주의가 필요함

  • Merge
    • 병합을 하면 합쳐진 브랜치의 커밋 메세지가 중복으로 쌓임
    • 커밋 순서를 바꾸지 않음
    • 존재하는 브랜치가 변경되지 않음
    • 새로운 merge commit을 생성
  • Rebase
    • 병합을 하면 브랜치의 커밋 메세지가 시간 순서대로 합쳐짐
      👉 히스토리가 깔끔함
    • 병합된 브랜치의 커밋의 위치는 Main 브랜치의 기존 커밋 뒤로 이동
    • 주의 사항
      • merge는 충돌이 발생하면 한번만 처리하면 되지만 rebase는 branch의 각각의 커밋마다 충돌처리를 해야 함
      • 이전의 커밋 이력을 변경하기 때문에 주의가 필요
      • 원격 저장소에 push까지 한 커밋이라면, 변경한 커밋들은 원격 저장소에 push 되지 않는다. 이때 git push -f 으로 강제로 원격 저장소에 커밋 히스토리를 덮어쓸 수 있다.



Reference

Git 명령어
https://medium.com/@joongwon/git-git-명령어-정리-c25b421ecdbd
https://git-scm.com/docs
PullFetch
https://cloud-oky.tistory.com/659
Rebase
https://seosh817.tistory.com/240
https://hajoung56.tistory.com/5

profile
SSAFY 7기. HMG. 협업, 소통, 사용자중심

0개의 댓글