상황
git에서 main 브렌치에 있던 것들을 pull한 뒤에, 작업을 하다가
다른 브렌치에 최신으로 업로드 된 내용을 확인 하기 위해서 같은 레포의 다른 브렌치를 pull 했다.
그랬더니 이런 메세지가 출력되었다.
(그런데 단순히 git 에서 main을 pull 받아온 상태에서 ,
같은 레포의 다른 브렌치를 pull 해도 같은 메세지가 출력되었다.)
🧐
에러메세지
hint: You have divergent branches and need to specify how to reconcile them.
hint: You can do so by running one of the following commands sometime before
hint: your next pull:
hint:
hint: git config pull.rebase false # merge
hint: git config pull.rebase true # rebase
hint: git config pull.ff only # fast-forward only
hint:
hint: You can replace "git config" with "git config --global" to set a default
hint: preference for all repositories. You can also pass --rebase, --no-rebase,
hint: or --ff-only on the command line to override the configured default per
hint: invocation.
fatal : Need to specify how to reconcile divergent branches.
힌트에 적힌 명령어가 궁금해서 찾아봤다.
❗️rebase
간단하게 말하면, 커밋 기록들을 바꿔줄 수 있는 기능이다.
장점은 커밋 이력이 마치 하나의 브렌치에서 작업한 것 처럼 선형의 히스토리를 남긴다.
주의점은 다시 작업해야 하는 경우가 발생 할 수 있다.
참고한 블로그
https://cross-the-line.tistory.com/20
그래서 아래의 명령어는 이런 의미다.
git config pull.rebase true
👉 pull 할 때 마다 rebase 옵션이 적용된다.
이렇게 하면 커밋 히스토리가 더 깔끔하게 유지되고, 병합 커밋이 생성되지 않는다.
git config pull.rebase false
👉 pull 할 때 rebase 옵션이 적용되지 않는다.
이렇게 하면 병합 커밋이 생성된다.
git config pull.ff only
👉 git pull 할 때 fast-forward 병합만 허용하도록 한다.
👀🧐👀 fast-forward 병합이란?
현재 브렌치가 병합 대상 브렌치의 최신 커밋을 직접 포함하고 있을때 일어나는 병합 방법 이다.
이 경우에 git은 추가적인 병합 커밋을 생성하지 않고 현재 브랜치를 최신 커밋으로 이동시킨다.
👶🧐그렇다면 git config pull.ff only 이걸 입력하면 어떤 일이 벌어질까?🧐❓
1. 만약 현재 브랜치가 "fast-forward"로 병합할 수 있는 상태이면 (즉, 최신 커밋을 직접 포함하고 있으면),
➡️`git pull`은 병합을 수행합니다.
2. 그러나 현재 브랜치가 "fast-forward"로 병합할 수 없는 상태이면 (즉, 최신 커밋을 포함하지 않으면),
➡️`git pull`은 병합을 거부하며 오류 메시지를 표시합니다.
https://ramen4598.tistory.com/251\
나의 경우 작업을 다시하는 위험성을 감수하고 싶지 않아서 rebase 기능은 쓰지 않기로 했고,
힌트 메세지로 주었던 fast-forward 병합 기능을 허용해 보기로 했다.
git config pull.rebase false 하고
git config pull.ff only 이렇게 한 뒤에
다시 같은 레포에 올라온 다른 브렌치에 올라온 내용을 받기 위해
git pull origin 브렌치이름
이렇게 해줬다.
그랬더니 뜨는 에러 메세지..
fatal: Not possible to fast-forward, aborting.
fast-forward 병합 기능을 사용할 수 없다고 나온다.
그래서 다시 아래의 명령어로 fast-forward 기능을 풀어주었다.
git config --unset pull.ff
그리고 또 한번 "git pull origin 브렌치이름" 시도..
또 다른 메세지..🥲
Please enter a commit message to explain why this merge is necessary,
especially if it merges an updated upstream into a topic branch.
Lines starting with '#' will be ignored, and an empty message aborts# the commit.
왜 merge가 필요한지 커밋 메세지를 남겨달라는 말인거 같은데 입력이 안되었다.
이에 대한 해결 방법으로 스텍오버플로우 에서 이런 글을 봤다.
1. i 를 눌러서 입력이 가능하게 만들어 준다.
2. commit message 를 입력한다.
3. esc 눌러서 메세지 입력에서 나온다.
4. :wq 를 입력한다.
5. enter 를 누른다
이 글에서는 이렇게 설명한다.
근본적인 문제는 Git이 기본적으로 대부분의 사람들이 사용하기에는 너무 직관적이지 않은 편집기인 VI 또는 Vim을 사용한다는 것
그리고 실제 유저가 사용하는 편집기가 다르다는 것.
이렇게 했더니 잘 해결 되었다.!!!
몇번이나 만난 에러라 앞으로 계속 사용하게 될 git을 좀 더 이해하고 다루고 싶어서 찾아보고 정리해 두었다.
다음에 또 이 에러를 만나면 어떻게 나아가야 할지 방법을 알게 되어서 너무 기쁘다 😆😎
'JS (Java Script)' 카테고리의 다른 글
파이어베이스, 자바스크립트 삭제기능 (feat. 문서 고유 id 값 가져오기) (1) | 2023.10.06 |
---|---|
git 에러 __ error: src refspec eunji does not match any (0) | 2023.09.29 |
git 클론 말고 pull 해서 받아온 후 push 하기. (0) | 2023.09.25 |
mongodb 설치 오류. Cannot install on Intel processor in ARM default prefix (/opt/homebrew)! (0) | 2023.09.17 |
? 연산자. optional chaining 연산자 / ??연산자 nullish coalescing 연산자 (0) | 2023.09.14 |