일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스마트 컨트렉트 함수이름 중복
- 러스트 기초
- 티스토리챌린지
- 스마트컨트렉트테스트
- rust 기초
- git rebase
- 스마트컨트렉트 함수이름 중복 호출
- ethers websocket
- 프록시배포구조
- 컨트렉트 배포 자동화
- ethers type
- ambiguous function description
- 스마트컨트렉트 예약어 함수이름 중복
- 오블완
- vue기초
- ethers
- multicall
- ethers typescript
- Vue
- 머신러닝기초
- 스마트컨트렉트프록시
- 러스트기초
- 체인의정석
- nest.js설명
- ethers v6
- chainlink 설명
- SBT표준
- Vue.js
- 컨트렉트 동일한 함수이름 호출
- 러스트 기초 학습
- Today
- Total
체인의정석
git 오류 "fatal: Need to specify how to reconcile divergent branches." 본문
git 오류 "fatal: Need to specify how to reconcile divergent branches."
체인의정석 2022. 11. 21. 10:24git 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.
먼저 이걸 이해하기 위해 기본적인 지식들이 필요했다.
1. fast-forward 관계
단어 뜻을 찾아보니 fast forward는 빨리감기 라는 뜻이라고 나온다.
아래 블로그 글을 통해 이해할 수 있었다. A가 dev고 B가 내가 담당한 수정 부분에 대한 브랜치라면 A의 히스토리와 같은 커밋일 때는 fast-forward 관계에 있는 것이다.
------ 퍼온 글 -----
2개의 커밋 A와 B가 있을때에 커밋A에 따른 히스토리가 커밋B에 따른 히스토리에 전부 포함되어 있는 경우,
2개의 커밋은 fast-forward관계이다 라던지 커밋A는 커밋B에 fast-forward한다라고 말한다.
------ 퍼온 글 -----
2. git config pull.ff only
hint: git config pull.ff only # fast-forward only
그럼 이뜻은? 내가 dev브랜치와 fast forward 일때만 pull을 하겠다는 뜻이다.
https://sanghye.tistory.com/43
해당 블로그를 참고해보니
"git pull --ff-only 의 옵션을 주어 실행하게 되면 fast-forwarded 가 새로운 commit 이 발생하지 않고 실행"
된다고 합니다.
만약 fast-forward가 안될 경우 git rebase 나 git merge로 해결해 주어야 한다고 합니다.
3. git config pull.rebase
rebase의 경우 위의블로그에서 본 그림을 통해 이해할 수 있었다.
Local을 위에다가 올려버리는 것인데 이 경우 history가 변경 될수 있기 때문에 주의해야 한다고 한다.
git config pull.rebase를 false로 두게 되면 merge 병합이 되게 된다.
git config pull.rebase를 true로 두게 되면 rebase가 되게 된다.
만약 merge 병합을 하게 될 경우 불필요한 commit이 남게 되지만 merge 병합을 안하게 되면 rebase를 써서 history가 변경될 가능성이 있게 된다.
결국 ff only에 rebase를 ture로 조합하여 불필요한 커밋을 줄이면서 매번 rebase를 시켜주거나
아니면 merge 병합을 시키는 방법 2가지가 있는것 같다.
4. git config --global pull.ff true
근데 외국 고수분의 글을 보니 이 3가지 (사실상 2가지) 말고 4번째 선택지가 있는거 같다.
https://github.com/desktop/desktop/issues/14431
바로
git config --global pull.ff true
이걸 쓰는 것이다.
이걸 쓰게 되면 로컬 브랜치에서 원격 브랜치를 fast forward 할 수 있게 하면서 로컬 브랜치에 머지를 수행하지 않기 때문이다.
여기에 대한 대안은 역시 위에 언급한 항상 머지를 시키거나 rebase를 진행하는 것인데.
실제로 위의 명령어를 해보니 충돌이 발생하는 상황에서는 merge 커밋이 올라가게 되고 그 외의 경우에는 오류 메세지 없이 잘 작동하는 것을 확인할 수 있었다.
'개발 > git' 카테고리의 다른 글
git dev에서 스테이징 환경으로 수동 배포하기(git diff, git merge, ssh) (0) | 2023.02.09 |
---|---|
깃허브 서브모듈 (스마트컨트렉트 & 백엔드의 다중 깃허브 주소 관리) - 업데이트 (0) | 2022.12.09 |
깃허브에 파일 경로만 올리고 싶다고 해도 비어있는 폴더를 올릴 수 없다. (0) | 2022.07.19 |
코드 리뷰 방안 변경 (0) | 2022.02.09 |
오랜기간 코드리뷰를 거친 후 merge를 해야 할때 참고할 사항들 (0) | 2021.12.29 |