본문 바로가기

git

제대로 파는 Git & GitHub - 얄코 2일차

여러 branch 만들어보기

 

Branch : 분기된 가지

  • 프로젝트를 하나 이상의 모습으로 관리해야 할 때
    • 예) 실배포용, 테스트서버용, 새로운 시도용
  • 여러 작업들이 각각 독립되어 진행될 때
    • 예) 새로운 기능1 , 코드 개선 , 긴급 수정
    • 각각 차원에서 작업한 뒤 확정된 것을 메인 차원에 통합

 

브랜치 생성 / 이동 / 삭제하기

브랜치 생성 명령어

git branch add-coach

 

 

브랜치 조회 

git branch

 

 

브랜치 이동

git switch add-coach

 

 

main 브랜치에서 2개의 작업을 진행하여 커밋하였다.

 

브랜치 생성과 동시에 이동

git switch -c new-teams

 

 

브랜치 이름 바꾸기

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

 

 

 

 

브랜치 삭제하기

git branch -d (삭제할 브랜치 명)

 

 

강제로 삭제하고 싶은경우 git branch -D (삭제할 브랜치명) 을 쓰면 된다.

 

각각의 브랜치에서 서로 다른 작업해보기

메인 브랜치에서 Add Olivia to Leopards 와 Add Freddie to Panthers 작업을 진행 하고

add-coach 브랜치에서도 3개의 작업을 진행하고 커밋하였다. 소스트리에서 보면 가지가 생성된 것을 볼수있다.

 

 

 

add-coach 브랜치에서는 Teddy 라는 코치가 추가 되었지만 main 브랜치로 스위치한 경우 코치의 내용이 사라진 것을 볼수있다.

 

 

 

new-teams 브랜치에서 2개의 작업을 진행하고 커밋하였다.

 

 

추가했던 파일 pumas 와 jaguars 가 main 브랜치에서는 보이지 않는 것을 볼수있다.

 

 

여러 브랜치 내역 편리하게 보기

git log -all --decorate --oneline --graph

 

 

branch 합치는 두가지 방법

merge : 두 브랜치를 한 커밋에 이어붙인다.

  • 브랜치 사용내역을 남길 필요가 있을 때 적합한 방식이다.

rebase : 브랜치를 다른 브랜치에 이어 붙인다.

  • 한 줄로 깔끔히 정리된 내역을 유지하기 원할 때 적합하다.
  • 이미 팀원과 공유된 커밋들에 대해서는 사용하지 않는 것이 좋다. 

 

branch 합치기

merge로 합치는 명령어

merge는 main 에서 작업한다.

git merge add-coach

 

 

main 브랜치에서도 Oscar라는 코치라는 내용이 보인다.

 

 

소스트리에서 확인해봤다. add-coach의 가지가 합쳐진 것 을 볼수있다.

 

 

merge가 이루어진 상황에서 다시 reset 하면 merge가 이뤄지기 전 시점으로 reset 된다.

 

 

다시 Coach의 내용이 사라진 것 을 볼수있다.

 

 

다시 add-coach 브랜치를 merge 하였다.

 

 

merge 가 된 브랜치는 삭제를 하였다.

 

 

 

rebase로 합치기

rebase는 main 브랜치가 아닌 new-teams 브랜치에서 이루어진다.

merge와는 반대이다.

git rebase main

 

 

 

소스트리에서 확인해봤다. 

하지만 현재 main 브랜치와 new-teams 브랜치의 위치가 다른 것을 볼 수있다.

메인 브랜치로 스위치해서 보면 pumas 와 jaguars 파일이 사라지는 것 을 볼수있다.

이런 경우에는 merge 를 해야한다.

 

 

 

이제 main과 new-teams 브랜치가 동일한 위치에 있는 것을 볼수있다.

 

 

이제 new-teams 브랜치를 삭제했다.

 

 

깔끔하게 main 브랜치로 병합된 것을 볼수있다.

 

 

충돌 해결하기

브랜치간 충돌을 해결해봤다.

상황을 만들기 위해 conflict-1 과 conflict-2 라는 브랜치를 생성하였다.

 

 

main 브랜치와 conflict-1 브랜치 , conflict-2 브랜치에 각각 작업하여 충돌하는 상황을 만들었다.

 

 

먼저 main 브랜치에서 conflict-1 을 merge 하였다.

 

 

현재 tigers.yaml 파일에서 충돌이 발생한 것을 볼수있다. 

 

충돌 해결이 어려운 경우 merge를 중단할 수 있다.

git merge --abort

 

 

소스트리를 보면 다시 되돌아간 것을 볼수있다.

 

 

다시 conflict-1을 merge 해주고 tigers.yaml 충돌 부분을 수정하여 커밋했다.

 

 

 

conflict-1과 병합된 것을 볼 수 있다.

 

 

rebase 충돌 해결하기

conflict-2 브랜치로 스위치한 후 main과 rebase 했다.

두개의 파일이 충돌하였다.

leopards.yaml 파일에서 충돌이 발생해 충돌 부분을 수정했다.

 

 

 

 

충돌이 발생한 파일 하나를 수정하였고 두번째 파일이 충돌한 것을 보여준다.

 

Current Change를 선택하고 계속 rebase 하였다.

 

 

rebase가 잘 된 것을 볼수있다. 하지만 main 브랜치와 conflict-2 브랜치의 위치가 달라 저번처럼 merge를 해주었다.

 

 

하나의 위치로 잘 병합되었다.

 

 

병합이 잘되었으면 브랜치는 미리미리 삭제 해주는 것이 좋다.

 

 

SourceTree로 진행해보기

상단의 브랜치를 눌러서 브랜치를 생성할 수 있다.

 

 

main 과 to-merge , to-rebase 에서 각각 작업을 진행하여 커밋하였다.

main 브랜치에서 to-merge 를 병합하려면 현재 브랜치로 to-merge 병합을 누르면 된다.

 

 

병합이 된 것을 볼수있다.

 

rebase는 to-rebase 브랜치에서 main을 오른쪽클릭하여 현재 변경사항을 main에 재배치를 누른다.

rebase가 잘 된것을 볼수있다.

main 브랜치와 to-rebase 브랜치가 위치가 다르기 때문에 merge 를 해서 하나로 맞춰주었다.

병합이 잘 된것을 볼수있다.

브랜치 삭제는 해당 브랜치 우클릭하여 삭제를 누르면 된다.

 

merge 충돌 해결해보기

충돌 상황을 발생하기 위해 conflict 브랜치를 생성하였다

main 브랜치에서 merge를 선택하니 충돌 병합이라는 메시지 창이 떴다.

충돌이 발생하여 커밋하지 않은 변경사항으로 보인다.

충돌 부분 소스를 수정하고 커밋한다.

병합이 잘 이루어진것을 볼수있다.

 

GitHub 시작하기

 

전에도 조금씩 GitHub를 사용해본적이 있어서 계정도 있고 저장소도 있었다.

그래서 가입하는 과정 같은 경우는 생략했다.

 

토큰 만들기

이 토큰이라는 것은 예전에 깃허브에 뭔가 올리고 다운로드할때 깃허브 아이디 패스워드를 입력했었는데 이 방식이 중단되었다. 그래서 이 프로젝트를 연동하기 위해 토큰을 사용한다.

 

상단 탭에 Settings를 선택한다.

Developer settings를 선택한다.

Generate new token을 선택한다.

토큰 명을 입력하고 유효기간을 설정하고 권한을 설정한다 나는 repo만 선택하였다. repo로도 충분하다.

윈도우 자격 증명 관리자로 들어가서 github.com 주소를 찾아 편집을 누른다.

사용자이름을 깃허브에 이름과 맞추고 암호에 복사한 토큰을 붙여넣는다.

소스트리에서 상단 도구 -> 옵션 -> 인증에 들어가서 github 편집을 눌러 사용자명과 비밀번호를 설정한다.

 

원격 저장소 사용하기

2번째인 push an existing repository from the command line 에있는 네모 박스를 눌러서 복사한다

VsCode에서 터미널에 복사한 명령어를 붙여넣는다.

로컬의 Git 저장소에 원격 저장소로의 연결을 추가하는 명령어이다.

원격 저장소 이름은 흔히 origin으로 사용한다.

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

기본 브랜치명을 main으로 한다.

git branch -M main

로컬 저장소의 커밋 내역들을 원격으로 업로드한다.

git push -u origin main

깃허브에 전에 했던 작업들이 올라와 있는 것을 볼수있다.

원격 지우기

git remote remove (origin 등 원격 이름)

원격 확인

 

GitHub에서 프로젝트 다운 받기

오른쪽 Code를 눌러서 네모 박스를 누른다. 주소가 복사된다

 

프로젝트를 받을 폴더로 이동하여 우클릭해서 Git Bash Here 을 선택한다.

git clone 명령어를 입력하여 프로젝트를 받아준다.

git clone (원격 저장소 주소)

성공적으로 다운받아진 것을 볼수있다.

push와 pull

push 와 pull 을 해보기 위해서 Add Evie to Leopards 메시지로 커밋을 하나 하였다

 

push 명령어

git push

깃허브에 커밋내역이 올라온 것을 볼수있다.

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

 

깃허브에서 소스파일을 수정할수있다.

pull

git pull

소스트리에서 원격 저장소의 소스를 당겨왔다

pull 할 것이 있을 때 push를 하면 어떻게 될까?

로컬에서 커밋 하나를 하였다.

원격에서도 커밋 하나를 하였다.

 

실수로 소스트리에서 생성된 브랜치 conflict를 지워버렸다. 

구글에 검색해보니 브랜치를 복구할수있는 방법이 있었다.

브랜치를 다행히 정상적으로 복구하였다.

 

push 할 것이 있을 시 pull 하는 두 가지 방법이 있다.

1. git pull --no-rebase (merge방식)

2. git pull --rebase (rebase방식)

 

merge 방식

소스트리에서 merge가 잘 된것을 볼수있다.

 

rebase 방식

rebase 방식은 먼저 원격에 있는 소스를 붙이고 로컬에 있는 소스를 붙인다.

 

협업상 충돌 발생 해결하기

충돌을 발생시키기 위해 로컬에서 커밋 하나를 추가하였다.

원격에도 커밋 하나를 추가 하였다.

pull 해보기 , --no-rebase 방식 , --rebase 방식

 

--no-rebase 방식

충돌난 소스를 수정 하고 나서 다시 커밋한다.

병합이 잘 된것을 볼수있다.

 

--rebase 방식

충돌난 소스를 수정하고 나서 다시 add 한다.

rebase가 잘 된것을 볼 수있다.

 

로컬의 내역 강제 push해보기

로컬의 내역이 원격의 내역보다 뒤쳐져있으면 PUSH를 할 수 없다. 하지만 원격의 올라간 내용이 뭔가 잘못돼서 로컬의 내역으로 다시 맞춰야 할 때 사용한다. 

하지만 남들과 협업할 때는 사용하는 것을 조심해야한다.

 

git push --force

먼저 로컬의 내역을 Edit Leopards manager 로 reset 했다.

force 하기 전에는 30개의 커밋 개수가 있었다.

force 후 29개로 줄어든 것을 볼수있다.

 

로컬에서 브랜치 만들어 원격에 push 해보기

실습을 위해 from-local 브랜치를 생성하고 from-local 브랜치에서 push를 해봤다.

아래와 같은 에러가 발생했다. from-local 브랜치를 어디에다 push를 해야할지 모른다는것이다.

명령어로 원격의 브랜치 명시 및 기본 설정

git push -u origin from-local

깃허브에서 아래 이미지와 같이 from-local 을 볼수있다.

from-local 브랜치에서 소스를 수정했다.

 

 

브랜치 목록을 원격의 브랜치까지 보는 명령어

git branch --all

소스트리에서도 원격 탭에서 볼수있다.

 

깃허브에서 브랜치를 만들수있다.

현재 브랜치를 조회시에는 깃허브에서 생성한 브랜치가 보이지않는다.

원격의 변경사항 확인

git fetch

깃허브에서 생성된 브랜치도 보인다.

 

로컬에 같은 이름의 브랜치를 생성하여 연결하고 switch 하는 명령어

git switch -t origin/from-remote

소스트리에서 보면 현재 이렇게 브랜치들이 생성되어있다. 

깃허브에서 from-local 브랜치에서 소스를 수정해서 제일 위에 있다.

로컬에 from-local 브랜치로 switch 후 pull 하였다. 

원격 브랜치 삭제 방법

 

git push (원격 이름) --delete (원격의 브랜치명)

 

 

SourceTree로 진행해보기

실습을 위해 리포지토리 하나를 더 생성했다.

주소를 복사하여 소스트리 탭에 저장소 -> 원격 저장소 추가 를 선택한다.

원격 저장소가 추가되었다.

 

push를 눌러 origin2에 push 하였다.

새로 생긴 리포지토리에도 커밋 내역이 들어와있다.

로컬에 새로운 커밋 내역을 추가하였다.

origin/main에 바뀐 내용 즉시 푸시 를 체크하면 커밋 + push가 바로 이루어진다.

원격 저장소에서도 커밋 하나를 작성했다.

패치를 누르면 원격 저장소에 내역을 불러온다.

소스트리 내역이 바뀐 것을 볼수있다.

상단 pull 을 누르고 pull 버튼을 누르면 원격 저장소로 부터 소스들을 가져온다.

pull 을 받아 로컬 저장소에도 소스가 수정 되었다.

 

CLI 로 from-local 브랜치를 하나 생성했다.

push를 눌러 from-local 도 푸시에 체크하여 push 했다. 

깃허브에 from-local 이라는 원격저장소 브랜치가 생성되었다.

원격저장소에서 from-remote 라는 브랜치를 생성하였다.

소스트리에서도 확인할수있다.

우클릭하여 체크아웃을 선택한다.

로컬 저장소에 from-remote 라는 브랜치가 생성된것을 볼수있다.

 

출처

https://www.inflearn.com/course/%EC%A0%9C%EB%8C%80%EB%A1%9C-%ED%8C%8C%EB%8A%94-%EA%B9%83

'git' 카테고리의 다른 글

제대로 파는 Git & GitHub - 얄코 1일차  (0) 2022.02.08