본문 바로가기

Github

06_02_깃허브로 협업하기: Pull Request

반응형

Pull Request

원격 저장소가 내 변경사항을 풀(Pull)하도록 요청(Request)을 보내는 방식

![img](https://blog.kakaocdn.net/dna/cYGY29/btrRo4q5sZF/AAAAAAAAAAAAAAAAAAAAAFCU3AVn5EH7TGAl-fEt1vlqIMU6nHg-GFldbMC-uxsj/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1753973999&allow_ip=&allow_referer=&signature=KCAC1wCTNALx3k%2B%2Bw0Eg%2BkULWE0%3D)

Pull Request 해보기

Pull Request 5단계

  1. 기여하려는 저장소를 본인 계정으로 **포크**하기
  2. 포크한 저장소를 **클론**하기
  3. 브랜치 생성 후 **생성한 브랜치에서 작업**하기
  4. 작업한 브랜치 **푸시**하기
  5. **풀 리퀘스트** 보내기

1. 기여하려는 저장소를 본인 계정으로 포크하기

❓포크(fork)

A *fork* is a copy of a repository. Forking a repository allows you to freely experiment with changes without affecting the original project. [View existing forks.](https://github.com/kangtegong/collaboration/network/members)

포크를 하면 이 저장소의 복사본이 나의 계정에 내 소유로 만들어진다.

![img](https://blog.kakaocdn.net/dna/6r3wx/btrRssLK2VT/AAAAAAAAAAAAAAAAAAAAAGbLyuETcXQhsoZMny75tftIonz6FLb8WxRVxmYvCpKz/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1753973999&allow_ip=&allow_referer=&signature=5Jg0bxRHiD%2FHTRpMJ2aWcUnpZRg%3D)

![img](https://blog.kakaocdn.net/dna/b8fIlH/btrRqG4LsGV/AAAAAAAAAAAAAAAAAAAAABvUJt8yFqwGPAQa5hoK-C115RcY_VtsY_Hw3SLGO9C4/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1753973999&allow_ip=&allow_referer=&signature=QUOmKut8GnETlLsvoI428VY3apU%3D)

이건 어디서 복제된 건지 알려준다.

![img](https://blog.kakaocdn.net/dna/FALO5/btrRqFdASgX/AAAAAAAAAAAAAAAAAAAAALLJBUWSG0-sIgiG-x9rcHRJ-IBCqizLVgIGX4EEtKQS/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1753973999&allow_ip=&allow_referer=&signature=jCfeZ0mLfSG%2B4IIaEulSHW8aaa8%3D)

포크는 왜 할까?

왜 우리 계정으로 저장소를 복제해올까?

원본 저장소는 우리 소유가 아니므로 push 권한이 없어서 못한다. 하지만 fork하면 우리 계정에 있는 저장소이므로 push가 가능해진다.

2. 포크한 저장소를 클론하기

⚠️'포크한 저장소'를 클론해야지, '원본 저장소'를 클론하는게 아니다!

![img](https://blog.kakaocdn.net/dna/JAEbW/btrRs865gnS/AAAAAAAAAAAAAAAAAAAAADzlE51nmO4UyfWOmjrjmZIDF5byg4m-rK_ZZ6sp3tr1/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1753973999&allow_ip=&allow_referer=&signature=70A2P1NQK%2FbDI6BERaEC%2Fb96GMc%3D)

클론 완료!

![img](https://blog.kakaocdn.net/dna/AvWMY/btrRtzpFf3i/AAAAAAAAAAAAAAAAAAAAAGrWfBwQL1fTc6qD_qlgTu7Atn47VwvtHrGA7vWMPulW/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1753973999&allow_ip=&allow_referer=&signature=KOLzd5sJXqUSNBWTdjxOPnSqOk0%3D)

3. 브랜치 생성 후 생성한 브랜치에서 작업하기

해당 브랜치에서 작업해야 하므로 checkout 필수!

![img](https://blog.kakaocdn.net/dna/bKAtCD/btrRtHup7US/AAAAAAAAAAAAAAAAAAAAAAoNTbmGNC-Hw3K5BLEm7106cV11-mYrWlLEtrN5GlWS/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1753973999&allow_ip=&allow_referer=&signature=mq1PxhGHGw6hdzvwzM66t3JdpO8%3D)

이제 여기서 작업을 하면 된다.

파일을 메모장으로 열고, 맨 아래에 값을 추가한 후 저장한다.

![img](https://blog.kakaocdn.net/dna/dcBEFU/btrRrncVPCW/AAAAAAAAAAAAAAAAAAAAAIEdFpioG3OXObGhzXGUP0GSpdjbRBXMZvWIktoE5S1c/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1753973999&allow_ip=&allow_referer=&signature=2VUtP8oH4lWi4JFJmom0a5PVfak%3D)

변경된 내용을 커밋한다.

![img](https://blog.kakaocdn.net/dna/c4fm6O/btrRpXS6OQ0/AAAAAAAAAAAAAAAAAAAAAJyL4hsJj8F9VVBUdeOWcp2RsvC4PIGVcdkCMYVe7kH_/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1753973999&allow_ip=&allow_referer=&signature=rSi4plGwMPiG%2FJ6qub83ViufyYI%3D)

4. 작업한 브랜치 푸시하기

변경된 내용을 푸시한다. main이 아니라 add_myname 브랜치에 푸시해야 한다.

![img](https://blog.kakaocdn.net/dna/dsIsGJ/btrRt8rKMYZ/AAAAAAAAAAAAAAAAAAAAANqIGGhPmSSWHRBAqVJylPC6Dw-uz7ekNALmJ5VlxB06/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1753973999&allow_ip=&allow_referer=&signature=TuLibd4WsVj7F04XonccjiHeso4%3D)

5. 풀 리퀘스트 보내기

내 저장소에서 **Compare & pull request**

![img](https://blog.kakaocdn.net/dna/bwhCpU/btrRsubN0yo/AAAAAAAAAAAAAAAAAAAAANMejGKbNvEgQa-pO2qID_evJKiqHACvdqSVNSpY8PIM/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1753973999&allow_ip=&allow_referer=&signature=Ts%2Bb0bo0PwCcShe5CA6c0LSKEyU%3D)

nno3onn/collaboration 저장소의 add_myname 브랜치가 -> kangtegong/collaboration 저장소의 main 브랜치로 pull 요청을 보낸다.

![img](https://blog.kakaocdn.net/dna/bQXNcg/btrRtU8cLuG/AAAAAAAAAAAAAAAAAAAAAMkJfUvLkjc1JX64Q0EJXmk3e_xB8s_98HVPKmA7Q_er/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1753973999&allow_ip=&allow_referer=&signature=oKC7XvUpW7CUhB1mUSP5XdEFkjI%3D)

아래엔 작업 내역도 볼 수 있다 (실수 있는지 확인).

![img](https://blog.kakaocdn.net/dna/AbjFa/btrRpETBm96/AAAAAAAAAAAAAAAAAAAAAAwffvsI0uOgTqhkkAh4xtvBQfbYOGkEIovFxIT4KDVW/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1753973999&allow_ip=&allow_referer=&signature=LPHoznlL1shU3ZOxdPsqELM4NJQ%3D)

kangtegong/collaboration 저장소에 Pull requests를 보면 내가 요청한 pull request가 생성된 것을 확인할 수 있다.

![img](https://blog.kakaocdn.net/dna/MYYAn/btrRt6U1Mw8/AAAAAAAAAAAAAAAAAAAAALTAjvmG4Ro1ahx3mOtuA6jI5V1Q4nYrHep8XB9gYdBd/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1753973999&allow_ip=&allow_referer=&signature=%2FekoN7ICRycNsPrQbpMUGAVgb4M%3D)

클릭해서 File changed에 들어가면 변경된 내역을 볼 수 있다.

![img](https://blog.kakaocdn.net/dna/rz3rK/btrRt8L4JcO/AAAAAAAAAAAAAAAAAAAAAD589YDKEXsrAfMmRVU-RvKfPj7Xl0KOdLAb25jiMT6r/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1753973999&allow_ip=&allow_referer=&signature=6H6MIxSIuYK4xOhD0eYAj%2FxYAtA%3D)

이제 request가 승인될 때까지 기다리면 된다.

원본 저장소 주인장은 받은 Pull Requests에 코멘트를 달거나 문제가 없으면 **Merge pull requests** 버튼을 눌러서 병합한다. 그러면 자동으로 pull request는 닫기게 되고 원본 저장소에 내가 작업한 내용이 반영된다.

(+) 승인된 후 브랜치는 삭제하기

pull request가 성공적으로 이뤄지고 이 브랜치에서 더이상 할 작업이 없다면 **Restore branch**를 눌러서 브랜치를 삭제하자.

반응형