git 실습

bongf·2021년 2월 25일
0

git

목록 보기
2/2

git

https://velog.io/@bongf/210216-TIL

  • git rebase시 일부러 충돌이 나게끔 설정해 충돌 해결을 해보았다.
    • (1) 지금 원격 upstream 인 깃 레포짓이 있고 거기서 fetch를 받아와 내 원격 origin 이 있는 상황
    • (2) 내가 접근하고 싶은 브랜치인 bong 브랜치를 가져와서 로컬에서 작업하다가
    • (3) upstream에 내가 수정한 내용이 반영 되게 pull request를 보냈고, meerge 되길 기다리면서 난 다른 브랜치 step3를 만들어 작업 중
    • (3) upstream에서 merge가 되었고
    • (4) 이를 내 로컬에서 반영하기 위해 내 로컬의 bong에도 해당 머지 내용을 반영해 주기 위해서
      • git fetch upstream bong 으로 이력을 업데이트 함
      • git rebase upstream/bong 으로 로컬에 있던 bong에 원격에서 merge한 내용을 반영시킴
    • (5) 이를 지금 작업 중인 step3에도 반영해야 함
      • step3는 이전 step2를 기반으로 만들어진 것이라 ( step가 pull request 과정을 거치면서 수정되기 전에)
      • 지금 머지된 내용이 반영이 안되어 있어 이를 반영해야 함
      • 그래서 step3브랜치로 switch해서 git rebase bong을 함 (이미 bong에는 위에서 해당 내용 rebase해서 수정 반영되어잇음)
      • 그러면 충돌이 난다. 나는 수정 전 step2를 기반으로 코드를 작성하고 있었어서
        • git bash에 브랜치 상태도 (step3|REBASE 1/1) 이런 식으로 표시된다.
      • 당황하지 말고 인텔리제이를 열고 코드를 수정해주고
      • git add .
      • 로 변경된 상황을 staged에 올려 주고
      • 다시 git rebase --continue를 해준다. 그럼 끝!

2. Git - 갓파이로 조교님 덕에 해결한 깃문제

https://velog.io/@bongf/210217-TIL

(2-1) 왜 학습?

  • 조원 한 분이 git과 풀리퀘의 과정 중에 문제가 있었다. 파이로님이 해결해 주어 이 같은 문제가 생겼을 때 대처법을 알게 되었다.

(2-2) 상황

  • upstream (원격의 원래 레포짓 ) - 여기서 fork 해서 내 깃헙에도 같은 내용 만든 다음에(oirgin), 내 깃헙에 올린 후 -> upstream에 풀 리퀘해서 merge 하는 내용의 반복 작업중, (step1 step2 같은 단계별로 pull request를 날리고 있다)
  • 그런데 문제 발생.
  • step2단계를 원격의 upstream에 pr 보낸 상황 - > 잘못된 브랜치로 pr보내서 closed
  • stpe3단계 브랜치를 만들고 해당 브랜치로 작업을 한 상황
  • step2에 잘못 step3까지 머지된 상황

(2-3) 문제 1. step2에 step3가 섞여 새로운 pr 생성시 step3 커밋 내용이 올라간다.

  • 갓 파이로님의 해결
  • 1) step2에서 step2_recover 로 브랜치를 체크아웃하고 생성한다. (혹시 모를 보존용) : git checkout -b step2_recover
  • 2) step2로 다시 switch
  • 3) step2의 마지막 커밋 id를 복사
  • 4) git reset --hard 마지막커밋id (해당 커밋으로 git을 되돌린다, step2 브랜치를)
  • 5) git log로 제대로 되었는지 확인!
    • 6) git push --force (하면 해당 내용이 강제로 원격에 push 된다. 충돌되어도 덮어버린다)
    • 7) 그 다음에 다시 내 원격의(origin)의 step 브랜치에 가보면 거기까지만 올라와있고 그걸 풀리퀘하면 된다 !! 해결

(2-4) 문제 2. 잘못된 브랜치로 PR을 보내서 -> closed 된 상태 -> 나에게 reopen 권한 없는데 -> 이걸 다시 upstream의 다른 브랜치로 PR을 보내려고 하면 -> 바뀐 내용이 없다면서 자꾸만 closed 된 PR을 보여주는 깃헙

  • 풀리퀘를 다른 브랜치로 보내고 싶은데, 내가 이미 pr을 보낸 것이 closed 된 상솽이다
  • 보통 이런 경우, re-open을 하고 브랜치를 바꿔서 다시 pr을 보내면 되지만
  • 문제는 re-open의 권한이 없다
  • 그러면 갓파이로의 해결
    1) 새로운 브랜치를 만들어서 거기서 pr을 보내라
    2) 코드를 수정 (엔터 등) 하고 다시 pr을 보내기

(2-5) 배운점

  • 갓파이로 조교님 능력은 역시다..
  • 브랜치는 많이 만들어도 전혀 상관 없다
    • 생각해보니 이 sanpshot 이기 때문에 많이 만들어도 삭제하면 된다
  • 하나의 브랜치당 하나의 PR만 날릴 수 있으며 이는 closed된 PR도 포함한다. (단, Closed 된 pr에서 코드 수정 후 다시 commit 후에 원격으로 pr을 보내는 것은 허용된다)

(2-6) 더 학습할 점

  • reset --hard와 -f(호눅스가 알려줬던 해결 책)은 어떤 차이가 있을까?
profile
spring, java학습

0개의 댓글