본문 바로가기

git & github

git & github 기초 - branch 합치기, github 기본원리

728x90
반응형

1) branch 합치기

    1-1) merge

    1-2) rebase

2) github 기본원리

    2-1) token 넣기

    2-2) 보내기 & 가져오기

    +) 과거 commit 수정

3) git & github 실습

 

 

 

 

 

1) branch 합치기

branch를 합치는 방법은 크게 2가지가 있는데 바로 "merge"와 "rebase"이다!!

 

1-1) merge

기점(merge 실행 후 branch가 사라지지 않고 남아있는 branch)을 중심으로 commit이 하나 더 생겨 합쳐진다!

* merge hell : merge가 너무 많아지면 git graph 상 commit과 branch 구조가 굉장히 복잡해진다!!

 

merge의 장점 : 히스토리 추적이 가능하기에 어떤 상황인지 파악하기가 용이하다!!

 

develop branch는 완성이 되면 그때 main branch에다가 이것을 넣을 것이다!

develop branch를 완성시키는 것이 목적이다!
→ develop branch에서 feature branch를 합칠 예정.

→ develop branch에서 hotfix branch를 합칠 예정.

 

(문법)

$ git switch develop
$ git merge [가져올 branch 이름]

$ git merge feature
$ git branch -d feature => feature branch를 삭제해주는 명령어

$ git merge hotfix
$ git branch -d hotfix => merge가 완료되면 반드시 가져온 branch는 지워줘야 함!!

 

 

1-2) rebase

develop branch를 main branch로 보내는 개념!!

(문법)

$ git switch develop
$ git rebase main

 

main branch 내용과 develop branch 내용이 서로 다름!

main branch가 아래에 있고, develop branch가 위에 있어서

 

 

 

 

2) github 기본원리

(중요!!) git은 프로그램이지만 github은 사이트(홈페이지)이다!!

github은 우리의 commit 내역들을 저장하는 용도로 사용함!!

자기 자신을 증명하는 강력한 방법 : Token(github에서 token을 발급해주면 이용자가 token을 받아 본인 인증을 진행한다는 개념)

ID, Password는 네트워크를 통해 왔다갔다 하기 때문에 보안 상 좋지 않으므로 github은 이를 금지시키고 Token 방식을 채택함!!

Top Repositories(원격 저장소) : github 메인 페이지 좌측 상단에 있음!!

 

 

2-1) token 넣기

MacOS 사용자
"키체인 접근" 접속 <= "command + space bar"를 눌러 검색창이 뜨면 그곳에 "키체인 접근"을 입력하여 들어가면 됨!!

키체인 항목 이름 : https://github.com
계정 : sangbeomhwang
암호 : 본인의 token 값
추가

 

원격 저장소 연결 확인하기

$ git remote add [원격 저장소 이름] [원격 저장소 주소]
$ git remote add origin [원격 저장소 주소]
$ git remote add origin https://github.com/sangbeomhwang/git_sample.git
$ git remote -v

$ git config --global credential.helper "osxkeychain" => 해당 코드를 통해 일회성 인증을 하지 않고, 맥북의 "키체인 접근"에 저장되어 있는 인증 정보(username, password)를 사용하여 인증처리를 하겠다는 의미!!(해당 단계는 본인 확인 혹은 검증을 위한 단계라 보면 됨!!)
$ git push origin main

 

Linux 사용자
1. Visual Studio Code에 있는 것을 활용하여 연결하는 방법
2. git을 설치해서 이를 활용하여 연결하는 방법

 

 

2-2) 보내기 & 가져오기

보내기

$ git push [원격 저장소 이름] [브랜치 이름]

 

전체 가져오기(clone : 전체 commit 내역들 혹은 리스트를 가져오는 것)

$ git clone [원격 저장소 주소]
$ git clone https://github.com/ingoo-blockchain/rebase_sample.git

 

push와 pull은 상호 사용자 인증이 가능한 사람들끼리만 가능하고,
clone은 그냥 전체를 다 가져오는 것이기 때문에 사용자 인증이 안돼도 상관없다!!

 

현 상태 가져오기(pull : 현재 내가 가지고 있는, 즉 local에서 가지고 있는 commit과 원격 저장소에서 가지고 있는 commit을 비교하여 그 차이에 해당하는 commit을 전부 가져오는 것)
=> ex) "pull"을 사용하면 local에서 가지고 있는(=본인이 가지고 있는) commit 중 HEAD(가장 최신 commit)의 해시값이 "1234"라고 했을 때 원격 저장소가 가지고 있는 commit 중 해시값이 "1234"인 것을 찾아 그 이후로 생성된 commit을 전부 local로 가져온다고 보면 됨!

$ git pull origin main

 

 

 

+) 과거 commit 수정
그전에 자꾸 nano 에디터가 열려 귀찮기에 해당 에디터를 바꾸고 싶은 경우, 아래와 같이 조치하면 됨!

$ git config --global core.editor "vi"


이번에 배울 rebase "-i"는
총 4가지 기능에 대해서 연습해볼 예정.
1. 메시지 commit 변경
2. commit 삭제
3. commit 합치기
4. commit 나누기

 


(문법)

$ git rebase -i [수정할 commit의 이전해시]


명령어

  • p(pick) : commit 그대로 두기
  • r(reword) : commit 메시지 변경
  • e(edit) : 수정을 위해 정지(commit 나누기)
  • d(drop) : commit 삭제
  • s(squash) : 이전 commit에 합치기

 


commit 메시지 변경하기
리스트페이지 완성~ 메시지를 "r"을 활용하여 해결

 

commit 삭제
test.html에 해당하는 commit에
"d" 입력

commit 합치기
"수정_1", "수정_2" commit을 합치기

commit 나누기
"완성했따~~"는
view.html, write.html이 합쳐져 있는데 이를 나눠보자.
"e"를 활용하여 멈추게 한 다음에,
git reset HEAD^ 또는 git reset HEAD~1 통해 repository에 있는 내용을
working directory로 이동시켜 보자.
이후

따로따로 commit한 이후

$ git rebase --continue

 

참고
"git rebase"는 이전 commit 히스토리를 변경하는 것이기 떄문에 정말 조심해야 함!!
그리고 이미 github 같은 원격 저장소에 push된 상태라면 더욱 조심해야하며,
만약 그래도 불구하고 꼭 써야할 상황이 온다면

$ git push --force
# 또는
$ git push -f


강제로 commit을 덮어씌어야 
이런 상황은 다른 협업 개발자와 이슈가 생길 수 있으니, 꼭 사전에 이야기하고 사용해야 함!

  • main : local에서 사용할 main branch를 의미함!
  • origin/main : 원격 저장소에서 가지고 있던 main branch를 의미함!


local에서 원격 저장소(github)에 데이터를 달라고 요청해야 데이터를 받을 수 있음!!(실시간으로 다른 사람이 push하면 해당 내용을 바로 확인할 수 없음!!)
=> 위와 같은 형태를 local과 원격 저장소가 통신한다고 표현함!!

(중요!!) 따라서 개발자는 무조건 먼저 "pull" 명령어를 사용하여 원격 저장소(github)로부터 새로운 commit 변경사항을 받아와서 최신화한 뒤에 "push" 명령어를 사용해 본인이 새로 추가한 commit이 담긴 버전을 보내야 한다!

 

 

 

 

3) git & github 실습