git (sourcetree 사용)

GILHUN·2022년 12월 13일
0

1. VCS(Version Control System)란

: 버전관리(Version Control System,VCS)란 소스 코드를 관리하는 시스템이나 툴

2. 버전 관리 툴

  • Git
  • Git-based
    -GitHub
    -Gitlab
    -BitBucket
  • SVN
  • Mercurial
  • Dimensions CM
  • Perforce
  • Bazaar
  • CVS

3. git 기초 명령어

  • init: 깃 저장소 초기화.
  • config: "configure"의 준말, 처음에 깃을 설정할 때 사용.
  • help: 명령어 도움말. 좀 더 자세하게 "git help init"이나 다른 용어를 타이핑하여 특정 깃 명령어를 사용하고 설정하는 법을 이해할 수도 있다.
  • status: 저장소 상태를 체크. 어떤 파일이 저장소 안에 있는지, 커밋이 필요한 변경사항이 있는지, 현재 저장소의 어떤 브랜치에서 작업하고 있는지 등을 볼 수 있다.
  • clone: 원격 저장소 복사.
  • add: 이 명령이 저장소에 새 파일들을 추가 하지는 않는다. 대신, 깃이 새 파일들을 지켜보게 한다. 파일을 추가하면, 깃의 저장소 "스냅샷"에 포함된다.
  • commit: 깃의 가장 중요한 명령어. 어떤 변경사항이라도 만든 후, 저장소의 "스냅샷"을 찍기 위해 이것을 입력한다. 보통 "git commit -m < Message >"형식으로 사용한다. -m 은 명령어의 그 다음 부분을 메시지로 읽어야 한다는 것을 말한다.
  • branch: 이 명령어는 새로운 브랜치를 만들고, 자신만의 변경사항과 파일 추가 등의 커밋 타임라인을 만든다. 새 브랜치를 "cats"로 부르고 싶으면, git branch cats를 타이핑한다.
  • checkout: 체크하길 원하는 저장소로 옮겨가게 해주는 탐색 명령이다. master 브랜치를 들여다보고 싶으면, git checkout master를 사용할 수 있고, git checkout cats로 또 다른 브랜치를 들여다볼 수 있다.
  • merge: 브랜치에서 작업을 끝내고, 모든 협업자가 볼 수 있는 master 브랜치로 병합할 수 있다. git merge cats는 "cats"브랜치에서 만든 모든 변경사항을 master로 추가한다.
  • push: 로컬 컴퓨터에서 작업하고 당신의 커밋을 깃허브에서 온라인으로도 볼 수 있기를 원한다면, 이 명령어로 깃허브에 변경사항을 push한다.
  • pull: 로컬 컴퓨터에서 작업할 때, 작업하고 있는 저장소의 최신 버전을 원하면, 이 명령어로 깃허브로부터 변경사항을 다운로드한다("pull").

4. git 주요 기능 정리

가. 파일의 내용 되돌리기

  • 특정 파일의 내용을 마지막 커밋으로 돌리고 싶다면 해당 파일 선택 후 "discard hunk"

나. 브랜치(branch) 변경하기

  • branch: 기존 내용을 유지한 체 새로운 내용을 추가하고 싶을 때 사용한다.
  • checkout: 특정 브랜치(혹은 커밋)으로 돌아가고 싶을 때 사용.

다. 병합하기(merge)

1) HEAD브랜치 변경사항 없고, 병합 대상 브랜치가 HEAD로부터 시작된 경우

  • 아주 쉽게 병합 가능(fast-forward)

2) 가지가 생겨난 경우

  • 원인이 될수있는 몇가지 경우
    • 과거의 커밋으로부터 브랜치를 생성해서 작업을 한 경우
    • 새로운 브랜치 작업 이후에 헤드에 다른 새 커밋이 있는 경우
    • 여러 브랜치를 동시에 작업하면서 병합을 시도할 경우
  • 충돌 발생 가능성 높음

라. 충돌(conflict) 해결하기

  • 가장 중요한 것: 겁내지 말기!!!
  • 같은 파일을 병합 대상 두 커밋에서 동시 수정했을 경우 충돌이 날 확률 높다.
  • SourceTree 사용한 충돌 해결 방법
    • Resolve using "Mine"
    • Resolve using "Their"
    • 두 파일 내용 모두 반영하고 싶은 경우에는 IDE에서 편집후 커밋

마. 커밋 되돌리기

1) reset 사용하기(비추..)

  • 장점: 쉬움
  • 단점
    • 커밋이 날라간다
    • push --force 필요할 수 있다

2) branch 만들어서 되돌리기

  • 장점: 커밋 내용 사라지지 않는다.
  • 단점: 트리가 지저분해진다.

3) revert

  • 장점: 가장 정석적(커밋 내용 사라지지 않는다.)
  • 단점: 충돌이 날 수 있다.
  • 주의사항: 현재 선택한 커밋의 내용을 되돌린다.
    • revert로 여러 커밋을 되돌리려면 최신 커밋부터 순서대로 revert

바. 작업중인 내용 임시저장

1) branch생성 및 커밋 덮어쓰기

  • 브랜치1에서 일단 (임시) 커밋을 한다.
  • 브랜치2로 체크아웃하여 할 일을 한다.
  • 다시 브랜치1로 되돌아와서 하던 작업을 계속 한다.
  • 커밋 덮어쓰기(commit --amend)를 한다.
  • (옵션) 필요하다면 (push --force)를 한다.

2) stash

  • 다른 브랜치로 체크아웃하기 전에 현재 작업내용을 저장하는 임시 저장소
  • 유용하다!

사. rebase

  • merge처럼 두 브랜치를 합칠 때 사용
  • 현재 브랜치가 대상 브랜치 위로 올라간다.
  • 위험하니 조심스레 사용(tree가 깔끔해져서 남용하는 경우가 있음..)
profile
기록하고 정렬하고 성장하자

0개의 댓글