• 카테고리

    질문 & 답변
  • 세부 분야

    개발 도구

  • 해결 여부

    미해결

Branch 협업 개념 질문드립니다.

20.08.12 11:21 작성 조회수 209

1

좋은 강의 정말 잘 듣고 있습니다.

듣는 중에 궁금한 게 있어서 질문 드립니다.

1. branch 협업의 개념 설명 해주신 걸 보면 A라는 프로젝트를 진행중인데 한 명은 B 작업을 또 다른 한 명은 C 작업을 해서

각각 그 B 와 C를 합쳐서 틀린 부분만 고쳐서 본 프로젝트에 넣는 것이 핵심이다 저는 그렇게 알아들었습니다. 

그런데

A 프로젝트에서 B 작업을 하고 있는 사람이 C 작업을 받아서 수정하려면 B 작업을 하는 사람이 C 작업의 코드까지 이해해야 하는 불필요함이 필요하다고 말씀하셨는데, 그거는 branch 협업을 해도 똑같은 상황 아닌가요? 예를 들자면

어차피 B 작업과 C 작업만 분리해서 합친다해도 B 작업자는 C 작업을 모르고 C 작업자는 B 작업을 몰라서 결국 둘 다 불필요한 공부가 필요한데 뭐가 다른 지 잘 모르겠습니다.

2. 버전을 commit 해서 github에 올리면 제일 마지막에 했던 버전으로 저장이 되던데 그 전에 저장했던 commit버전으로 파일을 적용하려면 어떻게 되돌아가야하나요? reset 개념이 아니라 그 전에 했던 버전으로 파일을 다시 덮어씌우고 싶은데 제일 최신 commit 버전으로 적용이 되있어서 어떻게 되돌아가는지 질문 드립니다.

답변 9

·

답변을 작성해보세요.

1

안녕하세요 :) 좋은 질문 감사드립니다!

1.

꼭 그렇지는 않습니다.

만일 B작업과 C작업을 합치는 과정에서 충돌하지 않는다면, 

그걸로 작업은 종료될 것이고,

설령 충돌이 난다고 할지라도 (물론 case by case긴 하지만)

"어느 위치에서 충돌이 났는지 판단하고 수정"하는 문제는

"코드의 A부터 Z까지 모두 이해하는"문제와는 다른 문제입니다.

예를 들어,

B작업에는 200개의 함수가 연관되어

C작업에는 300개의 함수가 연관되어 있는 상황에서,

5~10개의 함수(or 변수)를 동시에 수정해서 발생하는 충돌에 대해서는

충돌이 일어난 그 5~10개만 가지고 논의하면 될 겁니다.

(굳이 충돌이 일어나지 않은 함수들까지 알아야 할 필요는 없을 거에요)

반면 직접 손으로 병합을 하게 된다면, 

(git을 이용했다면 자동으로 병합이 되었겠지만)

굳이 일일이 소스들을 추가/병합해주어야 하기 떄문에

500개의 함수의 동작을 이해하지 않고는 병합이 어려울 겁니다.

그래서 git을 이용한 자동 병합이 효율적이라고 말씀드린거에요~ :)

2.

git log를 통해 

지금까지 만든 버전들(커밋들)을 볼 수 있을텐데요,

git reset --hard <돌아가고 싶은 버전의 해시값>

돌아가고 싶은 버전으로 reset해서 다시 push해주시면 됩니다.

자세한 과정은 아래 예시를 참고해주세요~

mckang@DESKTOP-D7RDI4B MINGW64 ~/Desktop/새 폴더 (master)
$ git log
commit 3d1a96ce8b50f4e2e27702a518006b669938a7bb (HEAD -> master)
Author: Kang Minchul <tegongkang@gmail.com>
Date:   Wed Aug 12 14:28:53 2020 +0900

    second

commit f8d72927d72a2437af75247fcbe81b36a5ee8ff0
Author: Kang Minchul <tegongkang@gmail.com>
Date:   Wed Aug 12 14:26:34 2020 +0900

    first

mckang@DESKTOP-D7RDI4B MINGW64 ~/Desktop/새 폴더 (master)
$ git reset --hard f8d72927d72a2437af75247fcbe81b36a5ee8ff0
HEAD is now at f8d7292 first

mckang@DESKTOP-D7RDI4B MINGW64 ~/Desktop/새 폴더 (master)
$ git log
commit f8d72927d72a2437af75247fcbe81b36a5ee8ff0 (HEAD -> master)
Author: Kang Minchul <tegongkang@gmail.com>
Date:   Wed Aug 12 14:26:34 2020 +0900

    first

0

임준수님의 프로필

임준수

질문자

2020.08.13

삭제를 하는 게 아니라 제 repository에 상대방 repository가 계속 보이는데 숨기기 기능 조차 없는건가요? folk한 상대의 프로젝트는 무한정으로 제 repository속에 계속 존재하면서 봐야하는건가요?

0

상대방 계정 속 repository는 본인의 계정 설정으로 삭제할 수 없습니다~

0

임준수님의 프로필

임준수

질문자

2020.08.12

fork한 상대방이 대상이 되는 repository 인데 이거는 제 자신의 setting에 들어가서 삭제를 못하던데 다른 삭제 방법이 있는지..

제 화면에서 제 repository만 보였으면 합니다.

js-1123/Port가 저의 repository고

web_together/Practice-PR이 제가 fork한 상대방의 repository 입니다.

젤 위의 제 repository만 보이게하고 상대방 거는 삭제를 하든 안보이게 하고 싶습니다.

감사합니다.

0

아, 그리고 질문 하시는 걸 죄송해 하실 필요 전혀 없습니다 :)

0

fork한 repository나 본인의 repository나 삭제의 과정은 동일합니다 :)

똑같이 삭제 버튼이 있어요

준수님이 fork한 "본인의 계정 속의" Practice-PR repository인지

아니면

준수님이 fork한 대상이 되는 "다른 사람의 계정 속의" Practice-PR repository 인지 확인해보시길 바랍니다

팁을 드리자면, url을 확인해보세요!

github.com/본인아이디/저장소이름

이면 준수님이 fork한 "본인의 계정 속의" Practice-PR repository이구요,

github.com/남의_아이디/저장소이름

이면 "다른 사람의 계정 속의" Practice-PR repository입니다.

0

임준수님의 프로필

임준수

질문자

2020.08.12

감사합니다.. 질문 너무 많이해서 죄송한데

그 저는 repository를 연습하면 바로바로 다 지우는 스타일이라서 다 지우고 있는데 folk를 해서 생성된 repository 

젤 위의 제 것말고 밑에 folk를 하면서 생성된 repository 같은데 저거는 setting를 눌러서 repository를 삭제하는 옵션이 안뜨는데 혹시 다른 방법이 있을까요?

0

1.

대부분 그렇게 하지 않는 이유는, 

일반적으로 master 브랜치에 다른 branch들도 나누어져 있기 때문입니다.

많은 브랜치 (새로운 버전들)이 개발되고 있는 상황에서

master 브랜치에 바로 새 코드를 넣기보다는

여러 branch를 나눔으로서 충돌을 관리하는 것이 더 안전합니다~

2.

네, git reset은 말 그대로 "지금 것은 취소하고 이전 것으로 

되돌아가라!" 하는 의미입니다.

말씀하신대로 이전 버전과 지금 버전 둘 사이에 고민이시라면

이전 버전에서 branch를 나누어 작업하시면 됩니다 :)

그럼 이전 버전과 지금 버전 사이에서 왔다 갔다 할 수 있을 거에요~

0

임준수님의 프로필

임준수

질문자

2020.08.12

답변 정말 감사합니다!

그 몇 가지 더 궁금한 게 있는데 pull request 할 때 굳이 새로운 branch를 생성해서 꼭 request 해야하나요?

1. master에서 필요한 부분 수정해서 master로 보내도 상관없을 것  같은데 굳이 새로운 브런치를 생성하는 이유가 있나요?

2. 그리고 log 버전 이동방법 대로 하면 두번 째 있던 로그는 사라지던데 원래 자동삭제되는건가요? 혹시나 나중에 그 버전이 더 옳은 거라서 돌아 갈 수도 있는건데 삭제 안되는 버전 이동은 없나요?