git

git에 대해(2)

노엠디엔 2022. 11. 11. 10:20

PR 이 무엇인가?

PR(Pull Request, 풀리퀘스트) 는 내 작업 내역을 바로 merge 하지 않고, 참여하고 있는 프로젝트에 내 작업(branch)을 merge 해달라고 요청(Request)을 먼저 보내는 것입니다.

작업한 내용에 대해 코드 리뷰를 하거나 같이 토론하면서 개선시킬 수 있는 기회가 생기는 것이지요! 프로젝트 기준에 맞지 않는다면 PR 은 거부(reject) 될 수도 있습니다.

pull requst

이렇게 리뷰한 후 작업내역을 최종 반영하면 프로젝트 퀄리티가 더 높아지겠지요? 또 기본적으로 프로젝트 품질을 관리해야 하는 회사에서 작업하거나, 여러 사람들이 참여하는 오픈소스에서는 PR 후 merge 하는 과정을 거치게 됩니다.

pul request merge반영

다른 repo 에 PR 하기 - fork 개념탑재

    • 내가 주인이 아닌 다른 repo에 PullRequset 하려면 어떻게 해야 할까요? 바로 fork (포크, 일종의 프로젝트 복사) 가 필요합니다!
    • repository의 사용권한이 다른 사람에게 있을 때, 예를 들면 많은 사람들이 참여하는 오픈소스처럼요. 내가 소유하고 있는 repo 가 아니더라도 프로젝트 제안할 때는 일단 프로젝트의 내용을 내 공간으로 가져와야 합니다.
    • fork(포크)는 원본 소스코드를 복사해서 새로운 독립적인 소프트웨어로 개발하는 것을 이야기합니다! 마치 어떤 문서를 복사해서 그 위에 내가 원하는 대로 수정해서 사용하는 것과 비슷해요!

fork예시
fork해보기

오른쪽 상단에 fork 부분에 버튼을 클릭

 

fork버튼 누른 후

fork 된 repo는 forked from을 통해 어떤 저장소에서 가져온 왔는지 알 수 있습니다.

forked from

내 원격 repo를 내 컴퓨터에 clone 하기 위해 sourcetree를 켜고 clone 해보았다.

sourcetree 새로만들기클릭
주소 붙여넣기
clone 후

 sourcetree에서 clone 후 상태 모습

 

로컬 repo에 feature/1_stir_fried 이름의 branch를 만들어보겠습니다.

브랜치 생성

만든 브랜치로 이동후에 텍스트 파일을 하나 만들어서 커밋해 보겠습니다.

commit하기

그다음으로 push 후에 깃 헙에 원격 repo로 가서 확인해 보자.

push하기
compare&pull request

compare&pull request 버튼을 눌러 pull request 하기

이 이후에  댓글로 받은 피드백을 추가로 개발하거나, repo 관리자가 merge pull request 할 때까지 기다리면 됩니다. PR 후 피드백을 주고받는 과정은 협업하는 사람들과 의사소통입니다! 실제 환경에서는 내가 원하는 작업만 하고 끝! 이 아니라 피드백을 수용하고 토의하면서 만들어나가게 됩니다.  

 

 

Ammend란?

최신 commit을 되돌리는 방법으로  팀과 협업하는 공간에서는 위험할 수 있는 작업이다.

기본적으로 나만 작업하는 특정 branch 하나에만 적용한다!라고 라고 생각하자!

작업하다가 commit 메시지에 오타가 났거나 파일을 까먹고 add(staging)하는 경우가 있을 것이다. 이때 최신의 commit을 수정하는 것을 amend(어맨드, 고치기)라고 한다. amend로는 가장 최신의 commit 만 고칠 수 있다는 것을 꼭 기억하자!

 

ammend예시

실습용으로 아까 만들어서 push 했던 test 파일을 새로 수정해서 커밋을 해보자.

커밋하기
commit 후

파일이 잘 커밋된 것을 확인할 수 있다. 이때 상단에 커밋 버튼을 눌러 커밋 창으로 이동해 보자.

커밋 메세지 창 마지막 커밋버튼

커밋 창으로 이동후에 오른쪽 하단에 커밋 옵션에서 마지막 커밋 수정 버튼을 눌러보자.

커밋창

메시지 창에 이전에 입려 했던 커밋 메시지가 입력된 걸 확인할 수 있다.

커밋 버튼을 누르면 위 사진과 같이 주의 문구가 뜨고 확인 버튼을 누르면 이전 커밋 상태로 돌아가게 된다.

ammend 후 상태

이렇게 ammend를 통해 해당 파일 또한 커밋 전으로 되돌아간 것도 알 수 있다.

 

강제 push

push 후에도 push 한 commit을 되돌릴 수 있습니다. 강제로 commit 을 덮어 씌우는 것과 같습니다! force push(강제 푸시)라고 합니다. 

이번엔 전에 수정했던 커밋을 다시 커밋해서 push까지 한 상태에서 진행해 보자.

push까지 진행

이때 아까 했던 ammend 방법을 다시 시도해 보자. 커밋 창을 누른 후 마지막 커밋 수정 버튼까지 눌러본 뒤 커밋!

 

ammend후 상태

 ammend 후 파일 상태이다. 이상태에서 상단에 push버튼을 눌러 강제 push를 해보겠다.

forcepush 체크

강제 push옵션을 체크 후에 ok버튼을 눌러보자

또 한 번에 주의 창이 띄면서 확인 버튼을 누르면 강제 push가 된 모습을 볼 수 있다.

강제push성공

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

 

commit 되돌리기 - revert, reset

ammend 말고도 commit을 되돌리는 방법으로 revert, reset이 있다.

다른 사람들과 같이 협업하고 있다면 어떤 내용이 되돌려졌는지 기록으로 남기는 것도 중요하다!. 어떤 내용을 되돌렸는지 새로운 commit을 남기는 것을 revert(리버트)라고 합니다. 최신 commit 뿐만 아니라 이전에 했던 commit 도 revert로 되돌릴 수 있답니다!

 

revert예시

아까 수정했던 test파일을 3번 수정 후에 3번 커밋해본 뒤 revert 해보자.

3번 커밋

이후에 지금 했던  commit을 되돌려보자. sourcetree에서 되돌리고 싶은 commit 누르고 우클릭 - 커밋 되돌리기. 아래 같은 팝업창이 뜨면 확인/예를 눌러주세요. 

 

승인창
처음 수정했던 커밋으로 돌아옴

RESET 해보기

reset (리셋)은 commit 했던 작업 내역을 말 그대로 리셋시키는 것입니다. '기억이 리셋되었다'가 '기억이 없다'는 말인 것처럼 과거로 돌아가서 새로운 삶을 사는 것처럼 reset 이후에 작업 내역은 없어진 commit 기록과 관계없습니다.

 

reset예시

  • reset 에는 세 가지 모드가 있습니다.
    • soft(소프트)
    • commit 들을 되돌리고 변경된 파일 작업 내역은 보존해서 파일 변경사항으로 보여줍니다. 이때 변경사항은 add 되지 않은 상태로 보입니다.
    • mixed(믹스드)
    • commit 들을 되돌리고 변경된 파일 작업 내역은 보존해서 파일 변경사항으로 보여줍니다. 이때 변경사항은 add 된 상태로 보입니다.
    • hard(하드)
    • commit 들을 되돌리고 그동안 작업했던 모든 것도 없애버립니다. 즉, 작업 내역을 복원할 수 없습니다.
  • 히스토리를 남기지 않고 변경하는 것이므로 강제 푸시를 해야 합니다. 그렇지 않으면 변경내역 이력이 남게 됩니다.

mixed모드로 한번 reset을 시도해보자 지금까지 revert 했던 커밋을 다시 리셋시켜보자.

 

mixed모드 적용 rest
히스토리 내역

위 사진과 같이 커밋 내역들이 사라지고 되돌리고 싶은 커밋의 커밋 실행 전 상태로 돌아왔다.

 

 

Stash란?

stash(스태시)는 숨겨두거나 넣어둔다는 뜻, 프로젝트의 변경사항을 임시적으로 보관해둘 때 사용합니다. 예를 들면, 다른 branch로 체크아웃하는 경우 현재 branch의 변경사항이 사라지게 됩니다. 아직 작업 중이라서 commit 하지 않고 변경사항만 보관해두고 싶을 수 있겠죠? 이때 commit 대신 stash를 사용합니다.

 

아까 리셋을 통해 커밋하기 전 상태에서 stash를 적용해보자 

stash 클릭
stash확인하기

다음과 같이 stashes라는 곳에 저장한 stash가 확인 가능하다

스테시적용, 스테시 삭제

 더 이상 임시 보관한 내용이 필요가 없다면 스태시 삭제를 누르면 됩니다.

 

새로운 파일을 만들어서 작업하다가 stash를 하려고 하면 아래처럼 스태시 버튼이 비활성화가 됩니다.

  • 파일명 앞에 보라색 물음표는 이 파일이 전에 Git에 commit 된 적이 없는 새로운 파일이라는 것을 뜻합니다.
  • 어차피 Git 이 아직 추적하지 않고 있는 파일입니다. 다른 branch에서도 이 파일이 보입니다! 그 어떤 브랜치에도 속하지 않은 상태이기 때문에 stash 하지 않고 checkout 해도 작업 내역이 날아가지 않습니다!
  • 즉, commit 한 적이 없는 파일이라면 stash 하지 않아도 됩니다. 이 내용을 빼놓고 commit 하고 싶다면 단순히 해당 파일을 add 하지 않고 commit 하면 됩니다.

'git' 카테고리의 다른 글

github에서 README.md 파일만든후 pull오류 해결  (0) 2022.11.10
git merge conflict 해결해보기(merge충돌)  (0) 2022.11.09
git sourcetree 틩김 오류 해결  (0) 2022.11.08
git Source tree push 오류 해결  (0) 2022.11.08
git에 대해  (0) 2022.11.08