Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

forDevLife

[Git] 다른 repository로 프로젝트(브랜치) 옮기기 본문

Etc

[Git] 다른 repository로 프로젝트(브랜치) 옮기기

JH_Lucid 2021. 11. 28. 17:27
목표
  • change_remote_1(내가 작업한 프로젝트)를 change_remote_2(초기화 된 프로젝트 - 기본 파일만 존재)로 원격 저장소를 변경!
  • change_remote_1의 기존 커밋에 change_remote_2의 커밋을 올려서 통합하기

 

현재 상태
  • remote_1 : first ~ third commit 존재
  • remote_2 : first commit 존재
  • 동일하게 README.md 파일 존재

remote_2 저장소 commit 내역

 

 

1. remote_1와 연결되어 있는 로컬저장소 연결 끊기 & 재연결 테스트

  • git remote remove origin : local과 remote 저장소 연결 끊기
  • git remote add origin ~ : ~ remote 저장소와 연결하기
  • 재연결 하게되면 이후 push할 때 최초 1회 git push -u origin (로컬 브랜치 명) 필요
  • remote_1 대상으로 'change_remote_test' 로컬에서 commit 3회 진행(first ~ third)

 

2. 두 번째 로컬 생성 및 remote_2와 새로운 연결

  • first commit만 수행
  • remote_2와 연결 끊기(첫 번째 로컬과 remote_2와 연결하는게 목표이므로!)

 

3. 첫 번째 로컬 - remote_1 간 연결 끊고, remote_2와 연결

  • 첫 번째 로컬과 remote_2를 연결한다.
  • git remote update origin --prune을 통해 유효하지 않은 branch를 제거한다 -> 필요하는지는 모르겠다.

 

4. git pull로 remote_2 정보 가져오기

 

  • git pull origin main --allow-unrelated-histories를 통해 현재 브랜치와 관련없는 history를 가져오게 된다. 
  • 이 때 README.md가 두 remote간 당연히 다를 것이다.
  • auto-merging 중 충돌되는 부분이 표시된 README.md가 생성된다. 
  • 상태는 노란색으로 표시된다.

위와 같이 README.md가 변경된다.

 

 

5. conflict 해결 후 커밋

  • README가 적당히 수정되었다면 다시 커밋을 한다.
  • 그리고 git push -u origin main을 통해 remote_2로 반영한다.

 

 

6. 결과

  • 아래 3개 : remote_1에서의 커밋
  • 1881 : remote_2에서의 커밋
  • 961e : conflict 해결 커밋

 

 

7. 왜 이걸 했는지?

 

우테코 과제 중 임시 과제에서 fork를 수행하고 branch를 만들었기 때문에, pull request하기로 되어있는 repository로 브랜치를 옮겨야 했다. 커밋 메시지를 그대로 옮기기 위해서 알아봤다.

 

1. 위와 같이 할 필요 없이, 우선 새로운 과제 제출 repository에서 fork를 했다.

2. 현재 내가 수행한 과제의 remote 저장소를 끊는다.

3. 새로운 repository의 remote에 연결한다. 내 branch name은 새로운 repository에 없을 것이기 때문에, 그냥 연결해서 push하면 되겠다고 생각했다.

4. 하지만 새로운 repository와 기존 repository의 commit이 왜 때문인지 달랐다... 그래서 pull request가 되지 않았다.

  • 새로운 repository의 main에는 아래와 같은 94764a7 커밋이 기본적으로 존재했다.
  • 내가 처음 실습용으로 받은 프로젝트의 첫번째 커밋은 39a27bc였다.
  • 따라서 base가 달라 합칠 수 없다는 의미이다.

 

5. 따라서 git rebase를 통해 문제를 해결했다.

  • 내가 수행한 과제의 첫번째 커밋을, 새로운 repository의 커밋 다음으로 rebase를 진행한다.
  • 이 과정에 계속 conflict가 발생한다. 커밋마다 파일 내용이 변경되기 때문에 어쩔 수 없다.

 

결국 위와 같이 합쳤다!!!

Comments