![article thumbnail image](https://blog.kakaocdn.net/dn/QLbyW/btrBexaQEim/BD7bRs1R0kfa9u2IFIRzhK/img.png)
📖 Git 정리 - 실습
Pull Request
Fork
Fork를 통해, 자신의 원격저장소로 원본 원격저장소를 통째로 복사해 가져간다.
Fork하는 이유
다른 사람이 작성한 코드를 수정했으면 좋겠다고 요청을 할때 사용한다.
팀 프로젝트를 진행시 필요한 사전작업이다.
Clone
Fork로 생성된 자신의 원격저장소를 내 컴퓨터의 로컬저장소에 Clone한다.
git bash 프로그램으로 Clone을 진행한다.
# Git Bash
$ git clone [원본 원격저장소를 복사하여 나의 원격저장소에 생성된 저장소의 URL]
로컬저장소와 Clone을 진행한 원격저장소가 자동으로 origin이라는 이름으로 연결되어 있다.
확인해보려면, 다음과 같은 명령어를 입력해서 확인한다.
# Git Bash
$ git remote -v
※ 절대로 원본 원격저장소의 URL을 가져오지 않도록 한다.
원본 원격저장소를 fork한 나의 원격저장소에 생성된 저장소의 URL을 가져오는 것이다!
이 작업에서 실수하면, 전체적으로 꼬이게 되니까 절대로 실수하지 않도록 한다.
remote
이번에는 원본 원격저장소와 자신의 로컬 저장소를 연결해줘야한다.
# Git Bash
$ git remote add [원본 원격저장소의 별명] [원본 원격저장소의 URL]
원본 원격저장소가 정상적으로 등록되었는지 확인하려면 아래 명령어를 입력
# Git Bash
$ git remote -v
npm install
팀 프로젝트를 진행하면, node_module은 용량이 커서 원격저장소에 올리지 않는다.
따라서 node_module은 개별적으로 설치를 해야한다.
※ 해당 프로젝트가 npm으로 작업 중인 경우
# Viusal Studio Code POWERCELL
npm install
※ 해당 프로젝트가 yarn으로 작업 중인 경우
# Viusal Studio Code POWERCELL
yarn install
branch
작업할 branch를 생성하여, 작업공간을 분리한다.
아래는 branch를 생성과 동시에 해당 branch로 이동하는 명령어이다.
# Git Bash
$ git checkout -b [branch 이름]
주로 자신이 기능구현할 내용을 branch로 정하는 경우가 많다.
예를 들어 회원가입 페이지를 만든다고 한다면, 'feature/signUpPage'로 정한다.
add, commit
생성한 branch에서 작업을 다 했다고 한다면, 이제는 Pull Request를 해야한다.
그전에 내가 작성한 코드를 로컬저장소에 저장해야한다.
순서는 다음과 같다.
우선 로컬저장소에 저장하기 위해서는, 파일이나 폴더들이 staged 상태여야한다.
# Git Bash
$ git add . # 새로 작성한 모든 파일 staged 상태로!
# 또는
$ git add [폴더명 또는 파일명] # 특정한 파일 또는 폴더만 staged 상태로!
staged 상태의 파일이나 폴더들을 아래 명령어를 통해 로컬저장소에 저장
# Git Bash
$ git commit -m ["commit할때 어떠한 코드를 저장하는지 메시지 남기는 부분"]
push
※ push할때 주의사항은, 절대로 원본 원격저장소에 push를 하면 안된다.
fork로 복사한 자신의 원격저장소에 push 해야한다.
만약 원본 원격저장소에 직접 push를 진행할 경우 reset 과정을 해야한다. 해당 과정은 3.원본 원격저장소를 과거로 되돌리기을 참고한다.
※ push할때 중요한 점은, 자신이 작업한 branch에 push해야된다.
fork로 복사한 자신의 원격저장소에 push
# Git Bash
$ git push origin [branch 명]
# clone했을때 따로 지정을 해주지 않았으면 origin은 자신의 원격저장소이다.
# branch 명은 어떤 branch에 있는 내용을 origin(자신의 원격저장소)에 push할지 명시하는 부분이다.
pull request
Fork한 자신의 원격저장소로 들어가면, Compare & pull request가 생성된다.
Pull Request를 통해 원본 원격저장소를 만든 사람에게, 님이 만든 코드 내가 수정했는데 한번 봐달라고 요청할 수 있다.
Compare & pull request 버튼을 클릭하면 보이는 화면은 다음과 같고, 확인해야할 부분이 있다.
1. 내가 Pull Request하려는 원본 원격저장소가 맞게 선택되었는지.
2. 내가 Pull Request하려는 원본 원격저장소의 branch가 맞게 선택되었는지.
3. Pull Request 요청하려는 내용이 담긴 자신의 원격저장소가 맞게 선택되었는지.
4. Pull Request 요청하려는 내용이 담긴 자신의 원격저장소의 branch가 맞게 선택되었는지.
5. 제목 작성
6. 무엇을 수정했는지 간략히 설명
7. Create Pull Request 버튼 클릭
위의 절차를 순서대로 진행하면, 정상적으로 Pull Request가 되었다.
Pull Request가 정상적으로 되었는지 확인하려면, 해당 원본 원격저장소의 Pull Request에 들어가면 확인할 수 있다.
코드 리뷰를 통해, 코드를 수정할 부분 발생
※ 방법은 2가지가 있다.
첫번째는 Pull Request를 close하고, 코드 수정 후 다시 pull Request하는 방법
두번째는 기존의 Pull Request는 가만히 두고, 코드만 수정하는 방법
나는 두번째 방법을 이용할 것이고, 방법은 아래와 같다.
- Review 받은 내용 수정후 git add 하기
- git commit --amend를 통해 최신 commit 덮어쓰기
- git push -f [자신의 원격저장소] [자신의 원격저장소의 branch]
merge 후 로컬저장소의 branch 삭제
※ merge가 진행된 후 꼭 branch를 삭제해야한다.
상대방이 Pull Request를 확인하고, merge를 한다면, 원본 원격저장소의 코드가 변경된다.
내 저장소와 원본 원격저장소간 동기화 작업 전, merge된 branch를 없애야한다.
fork 원격저장소에 있는 branch, 로컬 저장소에있는 branch, 총 2번의 작업을 해야한다.
1. fork 원격저장소에서 branch 삭제
Pull Request에서 merge된 branch를 삭제하겠냐고 github가 친절히 알려준다.
그러면 삭제해주면 된다.
위의 방법 말고, Git Bash 명령어로도 삭제할 수 있다.
# Git Bash
$ git push -d [fork 원격저장소] [원격저장소에 있는 branch]
이제 로컬 저장소에 있는 branch만 삭제해주면 된다.
근데, 로컬 저장소에서는 아직 원격저장소에 내가 삭제한 branch가 있다고 나와있다.
아직 원격저장소의 내용이 로컬저장소에 동기화가 안된 것이다.
아래의 명령어를 입력해서 fork 원격저장소의 branch와 로컬 저장소에서 참조중인 branch를 동기화한다.
# Git Bash
$ git fetch --prune
2. 로컬 저장소에서 branch 삭제
※ 해당 branch가 HEAD가 되어있으면 삭제가 되지 않는다.
※ branch를 삭제하려면, 다른 branch로 checkout한 다음에야 branch를 삭제할 수 있다.
merge된 로컬저장소의 branch를 삭제하는 명령어는 아래과 같다.
# Git Bash
$ git branch -d [삭제할 로컬저장소 branch]
만약 삭제가 되지 않고 오류가 나온다면, 새로운 파일이나 수정된 파일이 있어서 그렇기 때문에 해당 파일을 commit하면 branch를 삭제 할 수 있다.
commit하지 않고 branch를 강제로 삭제할 수 있다.
삭제하는 방법은 다음과 같다.
# Git Bash
$ git branch -D [삭제할 branch]
branch가 정상적으로 모두 삭제되었는지 확인하는 방법
fork 원격 저장소 branch list 확인하기
# Git Bash
$ git branch -r
로컬 저장소 branch list 확인하기
# Git Bash
$ git branch
pull
내가 merge한 원본 원격저장소의 branch가 dev branch인 경우, 내 fork 원격저장소의 dev branch와 코드 내용이 다를것이다.
로컬 저장소에서 dev branch로 이동하여 원본 원격저장소와 자신의 원격저장소를 동일하게 맞추기위해 pull을 진행한다.
명령어는 아래와 같다.
# Git Bash
$ git pull [원본 원격저장소 별명] [원본 원격저장소 branch]
push
마지막으로 자신의 로컬저장소에서 자신의 원격저장소에 push를 진행한다.
# Git Bash
$ git push [자신의 원격저장소 별명] [자신의 원격저장소의 branch]
이제 새롭게 작업을 진행하려 면, 5. branch부터 순서대로 다시 진행하면 된다.
원본 원격저장소 코드가 수정되어서, 자신의 로컬 및 원격저장소를 수정된 코드로 변경하기
pull : 충돌 X
원본 원격저장소가 연결되어 있지 않다면, 1. pull request를 참고하여 원격저장소를 연결해야한다.
※ 주의할 점은, 어떤 branch에 있는 코드를 불러올지 명령어에 원본 원격저장소의 branch를 명시해줘야한다.
pull을 하게되면, 로컬 저장소 branch의 내용이 변경되기때문에 로컬저장소의 branch를 꼭 확인해야한다.
# Git Bash
$ git pull [원본 원격저장소의 별명] [원본 원격저장소의 branch]
위의 명령어는 내 로컬저장소에서 작업을 하지 않았을 경우에 정상적으로 pull이 진행이 되지만, 내가 이미 코드를 작성하고 있는 중이라면 충돌이 발생해 pull이 안될 것이다.
충돌이 발생했다면, 밑의 '1-2. pull : 충돌 O'을 참고한다.
pull : 충돌 O
로컬 저장소에서 수정한 내 파일들을 임시 공간으로 옮긴다.
# Git Bash
$ git stash
※ stash는 modefied, deleted 등 tracked 파일만 임시 공간으로 옮긴다.untracked 파일은 임시 공간으로 못 옮긴다.
※ untracked 파일을 임시 공간으로 옮기고 싶다면, 아래 명령어를 이용해 staged 상태인 tracked로 바꾼 후에 stash를 하면 된다.
# Git Bash
$ git add .
stash를 완료 했다면, 원본 원격저장소에서 특정 branch에 있는 내용으로 pull을 진행하여, 내 로컬 저장소에 받는다.
# Git Bash
$ git pull [원본 원격저장소] [원본 원격저장소의 branch]
임시 공간에 있는 내 파일들을 pop(apply(적용) + drop(삭제))하여 병합을 진행한다.
# Git Bash
$ git stash pop
※ error: Your local changes to the following files would be overwritten by merge:
git stash pop 명령어를 입력했을때, 해당 error가 발생할 수 있다.
그 이유는 pull를 진행하고, stash하기 전에 파일을 또 수정했기때문이다.
이 경우에는 파일을 원상태로 돌려놓거나, 다시 stash를 하고 pop을 2번 진행하면 된다.
push
자신의 원격저장소의 branch에 반영해야한다.
# Git Bash
$ git push [자신의 원격저장소 별명] [자신의 원격저장소 branch]
npm install
다른 사람들이 개발하기위해 라이브러리를 설치할 가능성이 높다.
설치된 라이브러리가 적혀있는 package.json을 원격저장소로 공유하고 있다면, npm install 명령어를 입력하면 자동으로 설치할 수 있다.
# VSCODE POWERCELL
npm install
원본 원격저장소를 과거로 되돌리기
log
commit을 취소하기 위해서는 commit hash값을 알아야한다.
아래의 명령어를 입력하여 commit hash값을 확인한다.
# Git Bash
$ git log --oneline
reset
commit을 취소하는 방법은 여러가지가 있다.
그 중에서 나는 reset과 옵션 추가없이 진행한다.
# Git Bash
$ git reset [commit hash 값]
push
commit을 취소하는 방법은 여러가지가 있다.
그 중에서 나는 reset과 옵션 추가없이 진행한다.
로컬 저장소의 파일이 전 상태로 돌아왔으므로, 해당 상태에서 다시 push를 진행하면 commit 하기 전의 상태로 되돌릴 수 있다.
※ 이 방법은 덮어씌우는 방법이므로, 팀프로젝트의 경우에는 덮어씌우기 전 팀원과 상의를 하고 진행해야한다.
# Git Bash
$ git push -f [원본 원격저장소 별명] [원본 원격저장소 branch]
'공부 > 공통' 카테고리의 다른 글
[공부] 코딩 컨벤션 (기본) (0) | 2022.05.12 |
---|---|
[공부] npm 정리 (0) | 2022.05.05 |
[공부] git 정리 -3 (0) | 2022.03.06 |
[공부] git 정리 -2 (0) | 2022.03.04 |
[공부] git 정리 -1 (0) | 2022.02.28 |