팀 개발을 위한 Git, GitHub 시작하기 - 4, 5
CHAPTER 4 : 둘 이상의 원격저장소로 협업하기
🖊01.원본저장소를 복사해서 너구리의 원격저장소를 만든다(fork)
- 남의 원본저장소를 내 계정의 원격저장소로 복사해오는 명령어를 포크라고 한다. (브랜치를 포함한 모든커밋을 통째로 복사)
- 원본저장소의 소유자가 협력자로 등록하려면 원본저장소의 메뉴에서 [Settings - Collaborators ] 페이지에 들어가서 등록하려는 유저를 찾고, [Add collaborator] 를 클릭!
- 원본저장소에 직접 푸시를 하는것에 대한 부담이 있어서 그에 대한 대안이 풀리퀘스트이다
- 개발자는 원본저장소를 자신의 계정에 포크(복사)해서 원격저장소를 생성하고, 커밋을 올린후 병합요청 > 원본저장소의 소유자는 병합요청을 검토해서 원본저장소에 반영.
포크와 브랜치의 차이
- 포크 : 하나의 원본저장소에서 분기를 나눈다. / 하나의 원본저장소에서 코드 커밋 이력을 편하게 볼 수 있다. / 다수의 사용자가 다수의 브랜치를 만들면 관리하기 힘들다.
-
브랜치 : 여러 원격저장소를 만들어 분기한다. / 원본저장소에 영향을 미치지않으므로 원격저장소에서 마음껏 코드를 수정할 수 있다. / 원본저장소의 이력을 보려면 따로 주소를 추가해야 한다.
- 새로운 로그인으로 계정 후, 본계정의 iTshirt 레퍼지토리에서 fork 를 누르면 새계정에 그대로 복사된게 보인다.
- 포크된 레포에서 클론을 누른뒤, 소스트리에서 로컬저장소를 만들어준다 (맥에서는 새로만들기 > url에서 복제)
- 이때 새계정 커밋을 할때, 본계에서 하게되면 오류가 뜬다! 커멘드 + , 계정에 접근해서 새계정도 추가해준다.
🖊02.원본저장소에 풀 리퀘스트 보내기
- 포크한 저장소에 커밋한 내용을 원본 저장소 코드로 합치고 싶다면 ?
- 포크 저장소 : new pull request 클릭
- head 에는 내가 포크한 원격저장소가, base에는 원본저장소가 보이면 된다.
- add to merge 는 충돌없이 병합가능하다는 뜻
- 누르기 전에 changed file 꼭 확인 한 후 > create pull request 버튼 클릭 > pull request 설명 적기 > create pull request 버튼 클릭
- 이제 이후에는 본계정으로 돌아와서 pull request 에 들어오면 요청을 확인할 수 있다.
- 댓글을 달수도, 수정, 제안, 질문 가능
- 댓글만 달때는 comments / 승인시 approve > submit > merge full request > confim merge
-
병합이 성공적일땐 ‘이름 merget commit’ 메시지 확인 가능
- 오픈소스 기여시 자신의 github에서 보여주고 싶다면??
- 새계정 > 프로필 > customize your pins > 컨트리뷰션 활동 내역 확인가능 (기여한 레포 선택 후) > save pins
🖊03.묵은 커밋을 새 커밋으로 이력 조작하기(rebase)
- 원본저장소에 반영된 내용이 소스트리에는 반영이 안된 상태라면(master 2 화살표 이런모양이 있을때!) ? master (오른쪽마우스) > 가져오기 origin/master(추적됨): 원본저장소에서 pull 받아오는 것
- 이후 새계정 본계정 같은 파일에 다른내용을 추가하고, 새계정에서 전에와 같이 create pull request 를 누른다면 ?
- can’t automatically merge 확인 가능.
- 원본저장소에 새로운 커밋이 있는데, 포크한 내 원격저장소에는 안보일때는 소스트리가 원본과 원격저장소를 동시에 추적하게 하면 된다.
- 소스트리 새계정으로 바꾼뒤, 저장소 > 원격저장소 추가 (기존의 저장소는 origin/ 해당 원격저장소만 가리키고 있었음.)
-
원본저장소를 지칭하는 닉네임은 : upstream / 경로는 github 주소
-
이후 왼쪽에 보여지는 upstream(마우스 오른쪽) > upstream 에서 가져오기 클릭 : [upstream]원본 저장소에 있는 커밋 히스토리를 받아 오는것 : 패치 (새로고침, 이후에는 원본저장소의 이력이 보여짐)
- 충돌이 있을때 충돌을 해결한 후 병합 커밋을 또 올리게 되면, 불필요한 병합 커밋의 이력이 남는다. 이게 싫다면,
- 묵은커밋을 방금한 커밋처럼 : 리베이스
- 커밋의 베이스(파일의 베이스가 예전이 아니라 최신으로 선택)를 똑 떼서 다른곳으로 붙이는 것이 리베이스이다.
- 새로운 베이스로 삼고싶은 커밋의(마우스 오른쪽) 재배치 클릭 / 주의 다른사람들과 쓰는 브랜치라면 완전히 꼬이기 때문에 혼자만 쓰는브랜치에서 수행할 것
- 이후 충돌메세지는 전에 했던것처럼 수정한 후 스테이지에 올린다. > 액션 > 재배치 계속 클릭
- 이후 원격저장소에 push해서 로컬저장소의 이력을 반영해야하는데, 리베이스는 이력을 조작하기 때문에 일반적인 push로는 불가능 : 강제푸시
- 소스트리 옵션 > git > 강제푸시 가능
나의 경우는 push가 안되서 터미널을 열었다.
강제푸시 터미널
git push --force origin master
- 충돌 해결 후 create pull request
CHAPTER 5 : 실무 사례와 함께 Git 다루기
🖊01.실습을 위한 사전준비 : 새로운 원격저장소 만들기
- New repository : MIT License - ‘이 소스를 재가공해서 재배포 해도 된다.’라는 비교적 널널한 편의 라이센스 원격저장소를 만들고 컴퓨터에 clone하는방법
- New repository 생성 후 클론을 누르고 주소 복사 후, 소스트리-원격저장소에서 해당 주소를 클론 눌러준다.
🖊02.amend: 수정못한 파일이 있어요, 방금 만든 커밋에 추가하고 싶어요.
- 커밋을 방금 했는데 추가할 파일이 있다면??
- 소스트리 커밋에서 커밋옵션 - 마지막 커밋 수정 버튼 누른뒤 커밋하면 가능!
- 커밋 메세지 만도 수정가능하다! 위와 같이 커밋옵션 - 마지막 커밋 수정 버튼 누른뒤 메세지 수정하고 커밋하면 완료!
- 이후 강제푸시 까지 완료하면 끝!
하지만 나는 …. 이것도 되지않아서 터미널을 이용하였다!
git commit --amend
를 치면 vi 에디터가 열린다 ! 이때 당황하지말고 맨 위에있는 메세지를 수정하거나, 파일을 다시 추가하고싶은거면 종료해주면 된다!
vi > 저장 종료 :wq!
esc 눌러야 명령어 입력
r 커서위치 한글자 교체
R 커서위치부터 esc 누를때까지 다른글자로 교체</pre></code>
참고 : [vi edit](https://wiki.kldp.org/KoreanDoc/html/Vim_Guide-KLDP/Vim_Guide-KLDP.html)
**🖊03.cherry-pick: 저 커밋 하나만 떼서 지금 브랜치에 붙이고 싶어요**
- 다른 브랜치의 커밋 하나만 내 브랜치에 반영하기 : cherry-pick
- 해당 브랜치에 있는 상태에서 복제하길 원하는 커밋에 오른쪽마우스 누르고 체리픽 클릭!
- 위와 같이 두개 다 체크한 뒤 continue 버튼을 눌러준다.
- 이렇게 가져오게 되면, 내용은 가져오지만 같은 커밋은 아니기 때문에 커밋ID는 다르다.
**🖊04.reset: 옛날 커밋으로 브랜치를 되돌리고 싶어요**
- Soft / Mixed reset : 모든 기억을 남기면서 브랜치를 되돌리기
- 돌리고 싶은 커밋의 오른쪽 마우스 누르고 [~를 이 커밋으로 초기화] 클릭
- 밑에와 같은 창이 뜬다
- Hard = 작업 공간이 더럽던 깨끗하던, 깔끔하게 히스토리를 돌리겠다. (변경사항 날려먹음)
- Mixed = 변경사항을 작업공간에 뽑아둠, 커밋은 없던걸로 되돌렸지만 ~.md 파일을 만든 기록이 스테이지 아래에 살아있다 > 다시 수정 가능 (무엇을 스테이지에 올릴지 고민 가능)
- Soft = 변경사항을 작업공간에 Mixed 와 같이 뽑아두는데, Soft 는 변경사항을 스테이지에 올려논다. 당장 커밋 가능
- 로컬을 reset 해도 원격은 그대로 남아있는 경우가 많다. 그럴때는 강제푸시로 같이 뒤로 돌려줘야 한다.
**🖊05.revert: 이 커밋의 변경사항을 되돌리고 싶어요**
- revert : 커밋의 변경사항 되돌리는 새로운 커밋 만들기
- 이상하게, 잘못 커밋했을때 되돌리는 방법 : 해당 커밋의 오른쪽 마우스 클릭 후 밑에와 같이 커밋 되돌리기 버튼 클릭
**🖊06.stash: 변경사항을 잠시 다른곳에 저장하고 싶어요, 커밋은 안만들래요**
- stash : 커밋하지 않은 변경 사항을 서랍 속에 넣어두기
- 커밋하기엔 애매한 파일들!
- 해당 파일 누른 뒤, 스태시 클릭! **참고로 stash에는 tracked 상태 (추적중 - 한번이라도 깃에 올렸던 상태)인 파일들만 들어간다**
- 스태시를 다시 꺼낼때에는 왼쪽 바에서 원하는 스태시를 클릭 후 적용하면 끝!