git 협업할때 질문이요 어려워요..

a 브랜치(제가 사용함) b브랜치(팀원이 사용함) main 브랜치 이렇게 있을경우,

b브랜치를 사용하는 사람이 원격저장소 b브랜치에 자신이 작업한것을 올렸어요

그리고 제가 b브랜치에 있는 내용을 받아서 이어나가야 하는 상황인겁니다.

이때 제가 하려는게 맞는지 봐주세요

일단 main 브랜치로가서 pull을 받아요 새로올라온걸 최신화 하려는 목적으로요

그리고 저의 브랜치 a로 체크아웃해서 main 브랜치를 a 브랜치로 merge 합니다

main에 있는 최신 상태를 제가 사용하는 a브랜치로 동기화 하려고요

그다음

b브랜치로 체크아웃해서 최신으로 만들기 위해 pull 받고

a브랜치로 체크아웃해서 b브랜치를 a로 merge 하려고 합니다

여기서 제가 잘못생각하고있는거 지적해주세요,,

    6개의 답변이 있어요!

    • 안녕하세요.

      b 브랜치를 개발하는 팀원이 개발이 완료되었다면 b 브랜치를 main에 merge 한 다음, a 브랜치가 main 브랜치를 merge 하면 될 것 같습니다.

      b 브랜치가 개발 중이고 아직 main에 merge를 하지 않아야 되는 상황이라면 말씀하신대로 하는게 맞습니다. 그러나 b 브랜치는 최신 main 브랜치 소스가 아닌 상태에서 개발하는 거고, a 브랜치는 main 브랜치의 최신 버전을 가지고 있다면 문제가 발생할 순 있습니다.

      추천 방법은 첫 번째 방법 입니다.

    • 안녕하세요 제가 이해하기론 b브랜치의 작업을 이어가시려는거 같다고 가정하고 답변드리겠습니다.

      현재 a브랜치로 작업하시던걸 유지하면서,

      master(main)이후 작업된 b브랜치를 rebase하는게 맞아보여요

      a브랜치 체크아웃 하신뒤 b브랜치를 rebase 하시고 충돌난 부분은 merge해주시면 a브랜치를 master에 머지 시 충돌날 일이 적어질껍니다.

    • 생활코딩 (opentutorials.org) 여기에 가셔서 기본과 개념을 복습하세요.

      그리고나서 GitHub: Where the world builds software · GitHub 여기에 가셔서

      구현하고 싶은 기능에 관련된 소스나 아니면 참고하실만한 소스를 구하셔서 그걸로 연습하세요.

      전혀 아무런 참고할 소스조차 없다면 아무소스나 가져와서 분석하시면서 알고리즘을 학습하세요.

    • 안녕하세요.

      방법은 맞습니다. 그런데 이렇게 하면 너무 어렵고 branch를 쓰는 의미가 없어 집니다. 이렇게 해보시는 것을 권합니다.

      1. b branch를 사용하는 팀원이 master에 push할때까지 기다림

      2. a branch에서 작업하신 것을 master에 반영(push)

      만약 기다릴수 없다면..혹은 서로 연관된게 있다면, Git을 쓴다면 보통 review를 위해서 gerrit도 사용을 하실텐데요, gerrit에 올린 b의 patch에 대해서만 a branch에 반영을 해보세요.

      혹은 서로 연관된 기능이 너무 많이 앞에것처럼 할수 없다면, c 라는 새로운 branch를 만들고 거기에 같이 작업하시는 것을 권합니다.

      사람이 두명이라면 말씀하신것처럼 작업이 가능할수도 있지만

      1. a, b branch의 master pull시점이 다를수 있고

      2. 사람이 많이지면 위의 방법은 거의 불가능하고

      3. 계속해서 patch를 하는 노력이 너무 많이 들어갑니다.

      정확히 어떤 상황인지 말씀해주시면 다른 대안을 찾아보겠습니다.

    • 서비스 운영 방법은 각자 생각이 다르기 때문에 입장의 차이가 있다고 생각을 합니다.

      다만 개인적인 브랜치 운영방법에 빗대어 이야기를 드리고자 합니다.

      1. 개인 브랜치를 계속 유지할 필요가 없습니다.
      작업별로 브랜치를 새로 생성하여 작업 단위로 브랜치를 관리하는것이 차후 작업별로 체크하기 편합니다.

      2. 다른 사용자의 작업 내용을 브랜치로 가져올 필요가 있을까요?
      다른 사람의 브랜치를 가져오는 것보다 작업이 완료되고 테스트가 완료되었다면 main에 merge하여 최신의 상태를 유지하도록 하는것이 좋습니다.


      예를 든다면
      a, b의 개인 브랜치를 계속 활용하지 말고 작업 단위로 브랜치를 생성해서 관리
      사용자 등록, 사용자 수정, 게시판 조회의 기능이 있다면

      main에서 사용자등록을 위한 a 브랜치를 만들고 작업이 완료되면 main에 merge
      main은 항상 최신을 유지!!
      사용자 수정을 위한 b 브랜치를 만들고 작업이 완료되면 main에 merge
      main은 항상 최신을 유지!!
      게시판 조회를 위한 c 브랜치를 만들고 작업이 완료되면 main에 merge

      현 시점에서는 이렇게 관리하는 것이 좋아 보입니다.

      다만!!!
      git플로우가 딱딱 맞아 떨어지지 않습니다.
      작업 도중 새로운 작업이 추가되기도 하고 버그가 발생하여 새로운 브랜치를 생성도 할 수도 있고 프로젝트 규모가 커지고 작업 인원이 많아진다면 브랜치 전략이 필요합니다. 아래는 좀 더 다양한 git-flow를 전략을 참고할 수 있는 내용입니다.
      프로젝트 규모나 인원에 맞게 git-flow전략을 세우시면 됩니다.

      당근마켓 git 브랜치 전략
      https://medium.com/daangn/deploy-%EB%B8%8C%EB%9E%9C%EC%B9%98-%EC%A0%84%EB%9E%B5-%ED%99%9C%EC%9A%A9-%EB%B0%A9%EB%B2%95-545f278ca878
      우아한형제들 git 브랜치 전략
      https://woowabros.github.io/experience/2017/10/30/baemin-mobile-git-branch-strategy.html

    • 일단 a와 b가 main 에서 브랜치를 땄다고 가정합니다.

      b의 내용을 a 에 merge를 하려는 것이 목적이시지요?

      만약 a가 main 의 내용을 반드시 포함해야 할 필요가 없다면 b 브랜치를 a 브랜치로 merge를 하면 됩니다.

      병합(merge)후에는 아래와 같이 되겠지요.

      main 브랜치로 a가 갈 것이면 일부러 main 에서 pull 해서 merge를 할 필요는 없을 것 같아요.