본문 바로가기

Git&Github

git 공부하기

git에 대해 대충은 알겠는데 잘 사용할진 모르겠다. 당연한건가.. 그냥 열심히 찾아보고 많이 따라하는걸 기록 해야겠다.

 

 

일단 테스트용 js를 commit 하고 push 해놨다. 근데 github에 master 브랜치 이름 main으로 바꼈다 했는데 master라 나와서 약간 의문쓰

 

어쩐지 안올라가지더라.. 뭐 이름이야 바꾸면 되니까..

 

보면은 master 와 origin/master 2개가 있는게 보인다 이게 뭐냐면 master는 로컬저장소 그러니까 내 저장소의 master 브랜치이고, origin/master는 원격저장소 github의 master 브랜치이다. 지금 상황이 동일하다는 거지. 여기서 바꿔보겠다. 

 

이렇게 바꾸고 commit만 한 상태에서 확인해 보면

 

짠 master(로컬 저장소)와 origin/master(원격 저장소)가 위치가 다르다. 이걸 push까지 해야 원격저장소에도 변경 사항이 저장돼서 똑같아진다.

 

이제 testB라는 브랜치를 만들고 testB브랜치로 바꾸고 a = ccc로 바꾸고 commit을 해주면

git checkout -b testB // testB 브랜치 생성
git switch testB // git status 확인 후 브랜치 스위치 
git add . // staging area로 올리기
git commit -m "testB ccc" // 메세지를 포함해 커밋

 

이 순서로 진행하면 된다. (소스트리를 이용하면 버튼 딸깍 하면 된다.)

 

그러고 master 브랜치로 가서 누군가가 a = ddd로 바꿨다고 치자. 그럼

 

이 상태가 된다. bbb 일 때 testB라는 브랜치가 생겨서 가지가 뻗어나왔고, testB는 ccc로 변경 되었고, master는 ddd로 변경되었다. 근데 둘 다 원격 저장소에는 저장하지 않았으니 origin/testB와 oring/master는 bbb인 상태로 원격저장소에 남아있다. 

 

여기서 병합(merge)을 해버리면

 

충돌이 일어난다. 터미널에 명령어로 병합하는 코드는 아래와 같다.

git merge testB // master 브랜치를 기준으로 testB 브랜치를 병합한다.

 

왜 충돌이 일어나냐? master는 a = ddd로 돼있는데 testB에는 a = ccc로 돼있다. 어떻게 병합해야 하냐? 이런 의미?

그래서 코드를 보면 

 

이렇게 에러가 나있다. 설명이 잘 돼있다. 그럼 뭘 기준으로 병합할건지 선택해줘야 하는데 나는 testB 기준으로 병합을 해보겠다. 병합도 커밋을 해야 최종적으로 반영이 된다. (중요) 

 

* 참고로 HEAD 부분이 내가 checkout한 브랜치 부분이다. (현재 브랜치에 있는 파일의 내용)

 

그럼 이렇게 가지가 합쳐진걸 확인할 수 있다. 그럼 이제 문제가 있지. master를 기준으로 병합돼서 master는 괜찮은데 tetsB는 그대로 ccc인데..? 그래서 새로운 버전을 가져와야 한다. (당연히 원격 저장소의 master 브랜치에 push가 돼있어야 한다.) 그래서 어떻게 master 새 버전을 가져오냐? 

git pull origin master

 

이렇게 하면?

 

이렇게 merge ddd로 바뀐걸 확인할 수 있다! 

 


 

  • checkout - 다른 브랜치로 헤드를 옮긴다. (master에서 new 브랜치로 옮길 때)
  • commit을 할 때 마다 새 버전이 만들어진다.
  • Branch 전략 - 여러 명의 개발자가 1개의 저장소를 사용하는 환경에서 효과적으로 사용하기 위한 개념
    • Github flow - Master(Main) 브랜치를 중심으로 운영, 작업용 브랜치 구분 X, 수시로 배포 가능
      • 기능 추가, 버그 수정을 위한 브랜치 생성
      • commit은 서버의 동일한 브랜치에  push
      • Pull Request
      • Master(Main)에 merge
    • Git flow - 크게 5개의 브랜치 운영 
      • 메인 브랜치(계속 유지) : master, develop
        • master - 제품으로 배포할 수 있는 브랜치
        • develop - 개발자들이 개발하는 브랜치
          • develop은 master로부터 분기되며 다음 버전을 위해 개발하고 개발이 완료되면 master로 merge
      • 보조 프랜치(사용 완료시 삭제) : feature, release, hotfix
        • feature - 기능 구현을 위한 브랜치
          • develop으로부터 분기되어 기능 구현을 위해 개발 진행
          • 개발이 완료되면 develop으로 merge된 후 삭제 
          • merge에 충돌이 일어나면 develop으로부터 변경 내용을 불러와 수정을 한 후 merge 
        • release - QA를 위한 브랜치
          • develop 브랜치에서 개발이 완료된 브랜치를 master(main)브랜치로 merge하기 전에 QA 테스트를 진행하는 브랜치 
          • develop으로부터 분기되어 QA 진행 후 develop과 master에 merge 후 삭제 
        • hotfix - 버그에 빠른 수정을 위해 사용하는 브랜치 
          • master 브랜치에서 오류가 난다면 분기되어 오류를 수정한 후 master코드에 merge 후 develop에도 반영