PR (Pull Request)

PR(Pull Request) 

  • 내 작업내역을 바로 merge 하지 않고, 참여하고 있는 프로젝트에 내 작업(branch)를 merge해달라고 요청하는 것. 
  • PR 메시지엔 항상 #이슈번호를 포함해 준다. 협업하는 사람들과 의사소통임을 기억하자 !
  • 내가 참여하고 싶은 오픈소스 프로젝트가 있다면 코드를 작성해서 PR을 보내볼 수도 있다. 내가 다른 사람 소스를 사용하는 것을 넘어서 프로젝트에 참여할 수 있게 되는 것!  ( Github repo 의 contribution 페이지에 기여한 사람들 정보를 적어두기도 한다. )
  • 내 컴퓨터에서 명령을 내려서 PR 을 하는 방법도 있지만, Github 페이지에서 PR 하는 것이 훨씬 직관적이므로 통상적으로, Github repo 페이지에서 PR 한다.

       + 오픈 소스 예시 : 주니어 개발자 채용 정보( https://github.com/jojoldu/junior-recruit-scheduler )

 

 

② 로컬 repo로 fetch(페치)후 pull 해오기

  • pull은 commit 내역을 가져와서 로컬 branch 에 commit 을 합친다면, fetch 는 연결되어있는 원격 repo 의 commit 내역을 가져만 온다. 원격 repo 의 commit 내역을 합치지 않고 보기만 할때 주로 사용한다.
  • PR 은 리뷰하는 과정을 통상적으로 포함한다. 아래와 같은 상황에서는 PR 후에도 추가적으로 commit을 해야할 경우가 있다.
    • 리뷰에서 추가 수정을 요청받거나
    • PR 을 그대로 merge한다고 했을 때 merge conflict 가 나는 것을 미리 고치기
    • 따라서 PR 이 완료되기 전까진 PR 요청을 한 로컬 브랜치를 삭제하지 않도록 한다 ! PR 이 반영되기 전 추가 commit을 해야한다면, 로컬 branch에서 commit 후 원격 branch에 push해서 변경된 내용을 반영한다.

 

fork(포크)

  • 원본 소스코드를 복사해서 새로운 독립적인 소프트웨어로 개발하는 것
  • 마치 어떤 문서를 복사해서 그 위에 내가 원하는대로 수정해서 사용하는 것과 비슷한다.
  • repository 의 사용권한이 다른 사람에게 있을 때, 예를 들면 많은 사람들이 참여하는 오픈소스처럼 내가 소유하고 있는 repo 가 아니더라도 프로젝트 제안할 때는 일단 프로젝트의 내용을 내 공간으로 가져와야 한다.
  • 원본 repo를 내 공간으로 fork 해 온 후 PR을 날린다.
  • 내가 merge 할 권한이 없으므로 repo 관리자의 merge pull request (PR merge하기) 를 기다려야 한다.

 

amend - 최신 commit 고치기

amend : 최신의 commit을 수정하는 것.  amend 로는 가장 최신의 commit 만 고칠 수 있다.

 

① push 전 amend

  • 아래 그림과 같이 file status 로 가서 오른쪽 하단의 옵션에서 마지막 커밋 수정을 클릭하면 된다.

 

② push 후 amend

  1. 상단 메뉴바 - sourcetree - Preference 에 들어간다.
  2. Advanced - force push 를 선택
  3. amend 를 해서 commit 메시지를 수정한다.
  4. 강제 푸시 옵션을 선택하고 푸시한다. 상단 push 를 누른 후 뜨는 창에 강제 푸시 옵션을 체크!

  • 강제 푸시 옵션꼭 필요할 때만 나 혼자만 작업하는 branch에서 사용해야한다.
  • 다른 사람이 내가 수정하려고 한 commit 을 pull 하지 않은 상태여야한다.
  • 그렇지 않으면 다른 사람의 작업내역이 모두 꼬이기 때문에 다른 사람들은 기존에 작업하던 프로젝트를 지우고 새롭게 프로젝트를 clone 해야하는 상황이 발생!
  • 일반적인 push 를 할 때는 강제푸시 옵션에 체크가 되어있지 않는지 꼭 확인하기 !

 

Revert, Reset

① Revert

  • 앞서 배운 amend로 되돌리기는 가장 최신의 commit 만 되돌릴 수 있다. 그리고 어떤 걸 되돌렸는지도 알 수 없다.
  • 다른 사람들과 같이 협업하고 있다면 어떤 내용이 되돌려졌는지 기록으로 남기는 것도 중요
  • 어떤 내용을 되돌렸는지 새로운 commit을 남기는 것revert(리버트) 라고 한다. 최신 commit 뿐만 아니라 이전에 했던 commit 도 revert 로 되돌릴 수 있다!
  • sourcetree 에서 되돌리고 싶은 commit 누르고 우클릭 - 커밋 되돌리기를 선택. 아래 같은 팝업창이 뜨면 확인/예 클릭.

 

 

② Reset

  • reset (리셋)은 commit 했던 작업내역을 말 그대로 리셋시키는 것
  • reset 에는 세 가지 모드가 있다.
    • soft : commit 들을 되돌리고 변경된 파일 작업 내역은 보존해서 파일 변경사항으로 보여준다. 이때 변경사항은 add 되지 않은 상태로 보인다.
    • mixed :commit 들을 되돌리고 변경된 파일 작업 내역은 보존해서 파일 변경사항으로 보여준다. 이때 변경사항은 add 된 상태로 보인다.
    • hard : commit 들을 되돌리고 그동안 작업했던 모든 것도 없애버린다. 즉, 작업내역을 복원할 수 없다.
  • 히스토리를 남기지 않고 변경하는 것이므로 강제 푸시를 해야한다. 그렇지 않으면 변경내역 이력이 남게 됨.
  • 꼭! 나 혼자 작업하는 branch 에서만 해야한다! 협업하는 브랜치에 작업을 하게 되면 다른 사람 작업내역이 꼬여버리는 대참사 !

 

Stash

  • stash 는 숨겨두거나 넣어둔다는 뜻 - 프로젝트의 변경사항을 임시적으로 보관해둘 때 사용
  • 예를 들면, 다른 branch 로 체크아웃 하는 경우 현재 branch 의 변경사항이 사라지게 된다. 아직 작업 중이라서 commit 하지 않고 변경사항만 보관해두고 싶을 때 commit 대신 stash 를 사용
  • commit 한 적이 없는 파일이라면 stash 하지 않아도 된다.

1. 스태시를 사용할 브랜치에 체크아웃 되었는지 확인

2. 파일 상태를 먼저 확인하고 나서 상단 메뉴바에서 스태시 클릭

3. 창이 뜨면 stash에 대한 설명을 적어준다. (나중에 어떤 내용을 임시 보관했는지 알 수 있도록 메시지를 잘 적어주기)

4. 스태시 버튼을 누르면 임시 보관 완료! 

5. 다시 임시 보관 내용을 꺼내고 싶을 때는 :  왼쪽 메뉴바에서 [치워두기] - [원하는 파일] 선택 후 우클릭하고 [스태시적용]을 눌러준다.

6. 만약 더 이상 임시 보관한 내용이 필요가 없다면 스태시 삭제를 눌러준다.

 

 

 

마지막으로 꼭! commit 을 되돌리는 작업은 나만 사용하는 branch 에서만 작업을 해야한다! 그렇지 않으면 다른 사람의 commit history 가 엉망이 될 수 있다. 기억하기 !!! 

+ Recent posts