728x90

 

 

목차 및 요약

git merge
git merge --e
git merge --edit       // edit message before committing
git merge --squash     // 머지전 커밋 하나 생성
git merge --ff         // allow fast-forward (default)
git merge --ff-only    // fast-forward가 불가능하면, merge 취소
git merge -m           // allow fast-forward (default)
git merge --message    // fast-forward가 불가능하면, merge 취소
git merge --squash     // git diff 기능을 머지 마지막에 보여주는 옵션
git merge --stat       // git diff 기능을 머지 마지막에 보여주는 옵션

 

 

git merge의 도움말

git mere -h 명령어로 확인 가능하며 디테일 정보를 얻고 싶으면 이를 보면 된다

 

 

git merge

옵션 없는 기본 머지 명령어

git merge

 

 

git merge --e, --edit

edit message before committing
커밋 전에 커밋문구 편집

git merge --e
git merge --edit    // 커밋하기 전에 메시지 편집

 

 

git merge --squash

create a single commit instead of doing a merge
머지 대신 커밋 하나를 만듦

git merge --squash   // 머지전 커밋 하나 생성

 

 

git merge --ff-only

abort if fast-forward is not possible
fast-forward가 불가능하면, merge 취소

git merge --ff         // allow fast-forward **(default)**
git merge --ff-only    // fast-forward가 불가능하면, merge 취소

 

 

git merge -m, -message

merge commit message (for a non-fast-forward merge)
-non-fast-forward merge용

git merge -m           // allow fast-forward **(default)**
git merge --message    // fast-forward가 불가능하면, merge 취소

 

 

git merge --stat

show a diffstat at the end of the merge
머지 마지막에 다른 부분을 보여줌

git merge --stat   // git diff 기능을 머지 마지막에 보여주는 옵션

 

 

728x90
반응형
728x90

머지 커밋(Merge commit)이란?
그냥 커밋된 게 아닌 다른 것과 머지되면서 커밋된 것

머지 커밋(Merge commit)을 되돌릴 때(revert)는 어느 쪽 커밋으로 되돌릴 지(revert) 지정해주어야함
머지커밋 자체가 두개의 커밋이 하나로 합쳐진 것이기 때문에 두 커밋 중 어떤 걸로 되돌릴 지를 프로그램에게 알려줘야 되돌 수 있기 때문

git revert -m [순서번호] [commit hash]

 

 

순서번호 : git show에서 보여지는 Merge: 뒤의 값들에 차례대로 번호가 부여됨

git show ffea3b82201dc62a8741b414ebaec5dadcb2145d
commit ffea3b82201dc62a8741b414ebaec5dadcb2145d
Merge: f035f31 69bdd0d
Author: neverGiveUppppp <csy@naver.com>
Date:   Thu Feb 23 14:21:11 2023 +0900

    merge conflict resolve practice(feat.reminder)

git show한 ffea3b8은 f035f31과 69bdd0d 커밋이 merge된 커밋이라는 의미
이를 그냥 revert하면 아래의 에러 메시지가 발생하며 실패한다

 

error: commit [hashId] is a merge but no -m option was given.
fatal: revert failed

 

 

f035f31과 69bdd0d 둘 중 어떤 쭉으로 revert할지 프로그램에게 알려줘야한다
f035f31커밋으로 되돌리려면 -m 1
69bdd0d 커밋으로 되돌리려면 -m 2를 지정

git revert -m 1 f035f31  // f035f31
git revert -m 2 69bdd0d  // 69bdd0d 

(git show에서 보여지는 Merge: 뒤의 값들에 차례대로 번호가 부여됨)

 

1.머지커밋 된 커밋id를 찾는다
2.git show 해당 커밋id로 검색
3.git revert -m 1,2에 넣을 1,2번 번호와 커밋 내용을 보고 1,2번 어느 쪽으로 되돌릴 지 파악
4.git revert -m 1 해당커밋id(git show에서 썼던 id)
5.컨플릭트 발생할 거임
6.vi(http://6.vi) 파일명 해서 컨플릭트 내용 정리
7.컨플릭트 내용 삭제하고 다시 리버트하면 unmerger파일 에러 발생
8.여기서 부터는 언머지 파일을 삭제하던 뭐하던 옵션 선택

  • git rm [filename]
  • git revert --continue : 충돌 해결 및 런
  • git revert --skip : 되돌리기 하지만 이 패치 스킵
  • git revert --abort : 되돌리기 취소

 

cf) commit hash 확인하는 방법

1.Git Bash
git log

2.GitHub
커밋 히스토리 - 해당 커밋의 해쉬 클릭 - commit에서 해쉬 복사

 

참고자료
https://kyounghwan01.github.io/blog/etc/git/git-reset-revert/#reset
https://www.lainyzine.com/ko/article/git-revert-reverting-commit-in-git-repository/

728x90
반응형

'Git & GitHub' 카테고리의 다른 글

[Git] Working Directory, Staging Area, Repository 개념  (0) 2023.03.18
[Git] git rm 정리  (0) 2023.03.12
[Git] git revert 정리  (0) 2023.03.04
[Git] git add -p  (0) 2023.03.01
[Git] git log 정리  (0) 2023.02.17
728x90

 

 

어제 하루 종일 git 연습했다. merge conflict 나면 당황하지 않고 스무쓰하게 처리할 수 있게 되는 게 

목표여서 조금이라도 숙달되기 위해 계속 연습했다.

오늘 코딩 공부하면서 지난 번 노트북에서 작업했던 내용 커밋을 까먹었는지 마침 리모트랑 충돌이 나서

처음으로 길이가 좀 있는 코드의 merge conflict를 혼자서 해결했다. 노트북에 코드를 stash하고 원격에 있는 걸 pull 해온 후, stash pop으로 다시 불러와 이 과정에서 merge conflict를 했는데

터미널 안에서 vi 파일명으로 코드 수정 가능한 것도 알았고, 그래서 좀 만져보다가 소스트리로도 해결해보고 싶어서

소스트리에서 충돌난 파일을 인텔리제이로 연결해서 이걸로 수정을 마치고 커밋 푸쉬했다. 처음으로 머지 컨플릭트를 해결해서 한결 성장한 기분이 든다.

좀 더 연습하고 익숙해지면 커밋을 압축하는 squash에 대해 알아봐야겠다. 어제랑 엊그제도 조금 해봤는데 혼란이 와서 일단 머지만 연습했다.

 

이제 정처기 공부하러!

 

 

728x90
반응형
728x90

에러메시지

fatal: refusing to merge unrelated histories

 

상황

신규 repository에 새로 push 할려는 상황

근데 git local과 연결하고 push하기 전에 github에서 먼저 read.me를 만들어두고 전날 커밋해둠. 리드미를 지우면 해결되지만 전 날 잔디를 유지하고 싶어서 방법을 찾는 중

 

원인

에러 메세지 의미 : commit 히스토리가 서로 관련이 없다는 뜻

즉, 서로 관련성이 없기 때문에 merge할 수 없다는 것

 

github에서 새 repository를 생성하면서 만든 readme.md 파일때문인데

Git의 작동방식은 로컬 저장소의 commit 목록과 원격 저장소의 commit 목록을 비교한 후 원격 저장소의 마지막 commit id와 동일한 commit id를 가진 로컬 저장소의 commit 시점을 찾아낸 뒤, 원격 저장소의 마지막 커밋과 연결하기 때문

원격 저장소의 첫번째 commit이자 마지막 commit인 readme를 추가하는 commit이 원격 저장소에는 존재하지 않고, 따라서 현 상태에서는 둘을 연결할 수 없다.

 

해결

방법1

repository를 삭제하고 다시 만든다. (readme.md 파일을 없애고 다시 저장소를 만든다.)

 

방법2

git pull origin 브런치명 --allow-unrelated-histories

git에서는 서로 관련 두 프로젝트를 병합할 때 기본적으로 거부하는데, 이를 허용하는 명령어

 

방법3

강제로 합병하는 방법

주의! 기존 커밋했던 코드 및 파일이 유실될 수 있음

git push -u origin +master
git push origin master -f

 

 

참고자료(Reference)

https://jobc.tistory.com/177

https://seolahchloe.tistory.com/entry/Git-오류해결-Updates-were-rejected-because-the-tip-of-your-current-branch-is-behind-its-remote

728x90
반응형
728x90

 

Merge하다  해당 메시지와 함께 아래의 화면이 나올 경우

Please enter a commit message to explain why this merge is necessary,

especially if it merges an updated upstream into a topic branch.

일단 이는 깃 에러 메시지가 아니라고 한다. 깃이 사용하는 디폴트값의 에디터라고 하며

해결방법은

  1. press "i" (i for insert)
  2. write your merge message
  3. press "esc" (escape)
  4. write ":wq" (write & quit)

이렇게 하여 빠져나왔다

 

출처

https://stackoverflow.com/questions/19085807/please-enter-a-commit-message-to-explain-why-this-merge-is-necessary-especially

 

728x90
반응형
728x90

 

깃 사용하다보면 여러번 커밋해서 저장하고 그 기록이 쌓일텐데

이 상태에서 머지하면 커밋된 시점이 여러 상태로 머지가 되기 때문에

협업 시, 다른 팀원과 같은 파일을 다루다보면 꼬일 수 있다. 또한 포인트도 지저분해지기 때문에 

머지 전에 꼭 해야할 것! : Squash

스쿼시는 커밋을 하나로 합쳐주기 때문에 기록도 깔끔해서 나중에 돌릴 버그나 여타 상황 때문에

돌려서 작업하기도 좋고 충돌도 최소화 할 수 있다

 

728x90
반응형

+ Recent posts