[GIT] Git, GitHub 이론및 사용 정리

uijin kim·2023년 3월 2일
0

얄코님의 제대로 파는 Git & GitHub 을 기반으로 작성하였습니다.

GUI와 CLI를 적절하게 섞어서 사용하기를 권장한다.
CLI로는 git을 다루고 시각적인 브랜치 혹은 히스토리를 확인하기 위해서는 SourceTree와 같은 GUI를 사용하는것이 편하다. ( 개인적인 취향 )

Git의 최초 설정

Gitd에는 누가 어떤 작업을 했고, 어떻게 연락할지를 명시해주어야한다.

1. Git 전역으로 사용자 이름과 이메일 주소를 설정

git config --global user.name "(본인 이름)"
git config --global user.email "(본인 이메일)"

아래의 명령어로 확인할 수 있다.

git config --global user.name
git config --global user.email

2. 기본 브랜치명 변경

git config --global init.defaultBranch main

main을 default branch로 설정함. ( 필요에 따라 main 부분을 바꾸면 된다.)

3. Git 관리 시작

git init

Git 관리를 원하는 폴더에 가서 해당 명령어를 동작시키면 된다.
맥 숨김폴더 command + shift + .(마침표) 표시로 해당 폴더에 .git이 생성된 것을 확인 할 수 있다.

.git 폴더를 삭제하면 로컬에 저장된 git 히스토리를 모두 사라지게 된다.

git status

현재 폴더의 상태를 보여준다.

4. Git에게 맡기지 않을 것들

Git의 관리에서 특정 파일/폴더를 배제해야 할 경우

  • 빌드 결과물 및 라이브러리와 같은 포함할 필요가 없을 때
  • 포함하지 말아야하는 보안상 민감한 정보를 가진 파일들

.gitignore 파일을 생성하고 해당 파일에 배제할 파일 혹은 폴더들을 명시해준다.

다양한 패턴을 이용하여 적용할 수 있다.
ex) *.yaml, logs/, /folder/log, logs/**/debug.log

5. 변화를 저장하기

git add . 	// 모든 파일 담기
git add test.yaml	// 특정 파일 담기

git add 명령어만 가지고는 git에 최종적으로 등록된 것이 아닌 등록할 '준비'를 한 것이다.

git commit

git commit 명령어를 통해 최종적으로 변경된 내용을 git에 등록해준다.
git commit 명령어를 사용하게 되면 vi모드로 진입하게 된다.
해당 모드에서는 commit에 대한 메시지를 작성하게 된다.

commit 옵션을 이용하여 vi를 진입하지 않고 바로 메시지를 작성할 수 있다.

git commit -m "메시지"

팁 - git add, commit 을 한번에 하는 방법
새로 추가된 파일이 없을때만 가능

git commit -am "메시지"

모든 커밋은 고유값이 존재하고 로그를 확인 할 수 있다.

git log

6. 과거로 돌아가기

Git에서 과거로 돌아가는 방법은 reset, revert 두가지가 있다.
reset - 과거로 돌아가고 현재의 시점은 모두 삭제하게 된다.
revert - 과거의 기록을 가져와 현재 시점에 추가한다.

git reset --hard (돌아갈 커밋 해시)
git revert --hard (되돌릴 커밋 해시)

revert를 이용하여 특정 시점의 변경사항들(되돌리고 싶은 부분들만)을 되돌릴 수 있다.

팁 - revert사용시 자동 commit되지 않도록 하는 방법

git revert --no-commit (되돌릴 커밋 해시)

revert 이용시 컴퓨터가 결정을 내리지 못하고 개발자가 직접 선택을 해줘야하는 경우 Reverting 이라고 알림이 뜨게된다.

7. 여러 branch 만들기

프로젝트를 하나 이상의 모습으로 관리해야 할 때
ex) 실배포용, 테스트서버용, 새로운 시도용

여러 작업들이 각각 독립되어 진행될 때
ex) 신기능 1, 신기능 2, 코드개선

git branch (브랜치 이름)	// 해당 브랜치를 만든다.
git branch	// 현재 프로젝트의 브랜치 목록을 보여준다.
git switch (대상 브랜치)	// 대상 브랜치로 이동한다.

기존에는 브랜치로 이동하기위해 checkout 명령어를 사용했으나 Git 2.23버전부터 switch, restore로 분리되었다.

브랜치 생성과 동시에 이동하기

git switch -c (브랜치 이름)

브랜치 삭제하기

git branch -d (브랜치 이름)

브랜치 이름 바꾸기

git branch -m (기존 브랜치명) (새 브랜치명)

8. branch를 합치는 방법

branch를 합치는 방법에는 merge와 rebase 두가지 방법이 있다.
merge는 말 그대로 두개의 브랜치를 이어붙이는 것이다. 이 과정에서 새로운 커밋이 생성된다.
새로 생성되는 커밋에는 기존 브랜치와 병합 대상 브랜치의 변화들이 합쳐지게 된다.

rebase는 병합 대상의 커밋들을 기존 브랜치에다 이어 붙이는 것을 의미한다. (브랜치의 흔적이 남지 않음)
merge는 브랜치의 흔적을 남기지만 rebase는 히스토리를 한줄로 남기게 된다

git merge branch (합칠 대상 브랜치)

맥의 경우 merge 할때 커밋메시지를 입력하는 창이 뜰 수 있다.

git rebase (합치고자 하는 브랜치 

중요 - merge의 경우 내가 main에 있을때 어떤 브랜치를 가져와 합칠 건지를 정했다면 rebase의 경우 내가 해당 브랜치로 이동하여 어떤 브랜치에 옮겨 붙을 것인지를 정해야한다.

rebase 이후에 메인 브랜치의 싹이 끝으로 옮겨지지 않았을 경우 merge를 이용하여야 한다.
git, github 이론 심화에서 다시 다룰 예정

merge, rabase 이후 당연히 reset, revert를 이용하여 되돌아갈 수 있다.

9. 충돌 해결하기

서로 다른 브랜치가 서로 다른 내용을 가지고 있는 경우에 합치는 것은 문제가 되지 않지만, 같은 파일의 같은 위치에 서로 다른 내용이 수정되어 있을 경우 충돌이 발생하게 된다.

충돌이 발생하게 되면 해당 파일의 충돌된 부분에 특정 문자열로 git에서 표시를 해준다.

<<<<<<< HEAD
test01: here
=======
test02: here2
>>>>>>> BRANCH2

해당 문자열은 두개의 브랜치에서 같은 위치에 어떻게 서로 다른 내용이 적혀 있는지를 알려주며 git에서 어떤 내용을 선택하여 합칠지를 정해주어야 한다.

충돌되는 부분을 해결한 이후에는 add, commit을 해주면 된다.

merge를 중단하는 방법

git merge --abort

rebase를 이용할 때 발생하는 충돌 해결 방법는 merge와 조금 다르다.
merge의 경우 각 브랜치의 끝점 끼리의 충돌을 해결하지만, rebase의 경우 브랜치의 각 커밋을 가져와서 대상 브랜치에 이어 붙이기 때문에 각 커밋의 충돌을 해결해줘야 한다.

rebase 충돌 해결 이후 add 명령어를 입력, 이후 rebase --continue로 계속한다.
이 과정은 충돌이 모두 해결될 때까지 반복한다.

rabase를 중단하는 방법

git rebase --abort

1. Github 시작하기

로컬의 Git저장소에 원격 저장소로의 연결 추가

git remote add origin (원격 저장소 주소)

origin 은 원격 저장소의 이름으로, 다른 이름을 사용해도 된다.

기본 브랜치명을 main으로 - GitHub 권장

git branch -M main

로컬 저장소의 커밋 내역들을 원격으로 push(업로드)
-u 또는 --set-upstream : 현재 브랜치와 명시된 원격 브랜치 기본 연결(default 설정)
아래 명령어 이후에는 단순히 push 명령어만 작성해도 기본 연결된 원격 저장소로 저장된다.

git push -u origin main

현재 프로젝트와 연결된 원격 저장소 목록 확인

git remote

-v 명령어를 이용해서 remote와 관련된 자세한 내용을 확인 할 수 있다.

2. Github에서 다운받기

Github의 각 Project의 메인 화면에서 code - downloadZip 을 통해 해당 프로젝트를 압축파일로 다운 받을 수 있지만 이렇게 할 경우 .git 파일이 다운되지 않고, 협업이 불가능하다.
협업을 위해서는 다운받기 원하는 폴더를 만들고 해당 폴더에서 clone 명령어를 작성한다

git clone (clone 주소) // Github Project home - code - clonde에서 확인 가능

3. 원격의 커밋 당겨오기(pull)

내 동료가 올려둔 github의 작업을 가져올 수 있다.

git pull origin main

여기서 origin은 원격 저장소의 별칭이고 main은 브랜치이다.
상단에 적어둔것과 같이 기본 연결을 해둘 경우 git pull 명령어만으로도 pull 명령어가 실행될 수 있다.

pull 할 것이 있을 때 push를 할 경우는 '내가 가진 코드가 최신 버전이 아니기 때문에' push를 할 수 없다. 이럴때는 원격 저장소의 최신 버전을 pull하여 원격의 버전을 받아온 다음 push가 가능하다.

'원격 저장소에 push 하기 위해서는 나의 코드가 원격 저장소의 최신코드에 맞춰져 있어야 한다.'

push 할 것이 있을 때 pull 하는 두 가지 방법은 merge, rebase를 통해 코드를 정리한 후 pull 할 수 있다.

  • 로컬과 원격의 차이를 각각의 분기된 브랜치로 보고 merge 하는 방법 - merge 방식
git pull --no-rebase
  • rebase 방식
git pull --rebase
profile
느리더라도, 꾸준하게

0개의 댓글