
Git 저장소에 연결된 파일을 수정하면 수정 후에 아직 스테이징이나 커밋 안했을 때 코드 왼쪽에 조그맣게 세로줄이 뜬다.
이걸 Diff Decorations이라고 한다.
Diff Decorations는 파일이 Git 저장소에 연결되어 있을 대 파일의 변경된 부분을 색상이나 아이콘 등으로 표시해서 코드의 추가, 수정, 삭제 상태를 보여준다. 코드의 줄 번호 왼쪽 여백(Gutter)에 나오고 클릭하면 상태 변화를 보여준다.
초록색 줄 : 새로 추가된 코드
Git에 스테이징되거나 커밋된 적이 없는 새로운 라인
노란색(주황색)줄: 기존 코드가 수정된 경우
빨간색: 삭제된 코드
Diff Decorations 활성화/비활성화 기본 설정 변경
Ctrl + , 또는 Cmd + ,를 눌러서 Settings 열기
검색창에 diffEditor.decorations 입력
설정에서 Editor > Diff: Decorations를 활성화 / 비활성화
다이렉트 JSON 설정: settings.json 파일에서
"diffEditor.decorations": false 로도 가능
What is meant by the colourful line markings on the left side of the editor in VS Code?
Here are a few images showing what I'm referring to. They come in different colours, for example red blue and green below: Red line markings Blue line markings zoomed in Green line markings zoome...
stackoverflow.com
Overwrite 는 기존 데이터를 새로운 데이터로 대체하는 작업
Copy Reverting은 파일을 복사하여 이전 상태로 되돌리는 작업
현재 hello.md 수정까지 했는데 여기서 뭔가 마음에 안들어서 이전 작업내용으로 일단 되돌아야 할 것 같다.
그리고 다시 시작해야 할 것 같다. 현재 수정한 내용은 그대로 놔두고 hello.md 파일 생성에서 새로 시작하고 싶다.
hello.md 우클릭 > 브랜치 생성

Git 브랜치 병합하기
병합(merge)이란?
하나의 브랜치를 현재 브랜치와 합치는 것을 병합(merge) 라고 한다.
현재 브랜치는 헤드(HEAD) 브랜치라고 함
예를 들어서 HEAD브랜치가 main이고 여기서 version2 브랜치를 병합하면 version2의 내용이 main에 반영되게 된다.
병합시 자주 발생하는 상황?
Learn Git Branching
https://learngitbranching.js.org/?locale=ko
Learn Git Branching
An interactive Git visualization tool to educate and challenge!
learngitbranching.js.org
여기서 연습 가능


병합(merger)과 충돌

main을 선택하고 version3를 메인에 병합하려고 하는데 충돌이 났다.

불필요한 부분 수동으로 지운다.

소스트리로 가서 커밋

푸쉬하고 이제 버전 3는 삭제해도 된다.
그런데 푸쉬가 안된다.

오류메세지
git -c diff.mnemonicprefix=false -c core.quotepath=false --no-optional-locks push -v --set-upstream origin main:main Pushing to 깃저장소URL To 깃저장소URL ! [rejected] main -> main (non-fast-forward) error: failed to push some refs to 깃저장소URL hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. If you want to integrate the remote changes, hint: use 'git pull' before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details.
오류 메시지는 로컬 브랜치와 원격 브랜치 간의 히스토리가 일치하지 않을 때 발생한다. 즉, 원격 main 브랜치가 로컬 main 브랜치보다 더 앞서 있는 경우이다. 이 문제를 해결하려면 원격 브랜치의 변경 사항을 통합해야 한다.
Fetch

Pull > 원격 브랜치를 origin/main 로 설정 > Pull with rebase 하고 Push

이제 version3을 삭제해 주었다.

지금 헷갈리는 건 origin/main부분
계속 origin/main 은 병합이 안되고 아래쪽에 있길래 찾아봤다.
origin/main은 GitHub 같은 원격 저장소에 있는 main 브랜치의 최신 상태 <
로컬 브랜치와 원격 브랜치의 상태가 다를 수 있기 때문에,
origin/main은 로컬에서 직접 작업한 내용이 아니라, GitHub에 마지막으로 푸시된 내용을 나타낸다.
깃허브에 main을 pull 해주니까 저 아래에 있던 origin/main이 다시 맨 위로 올라옴

체크아웃한 브랜치는 병합 대상이 아니라 병합이 일어날 브랜치이다.
즉, 병합을 실행하려면 먼저 병합 대상이 될 브랜치를 체크아웃해야 한다.
따라서, main 브랜치에 version4 브랜치를 병합하려면,
먼저 main 브랜치로 체크아웃한 후 version4 브랜치를 병합해야 한다.
그럼 main으로 version4가 올라와서 main 에 병합
체크아웃 하면 이렇게 앞에 동그라미가 생김

master에 체크아웃 하고 version4 눌러서 병합하면 version4가 master로 병합됨
근데 이 때 version4가 내려가는게 아니고 master이 version4 옆으로 올라옴

origin/main 과 master이 함께 있었는데 master을 체크아웃한 상태에서
version4 우클릭> 병합 해 줌
그럼 결과는 위와 같다 (fast-forward 상황)
이 상태에서 version3를 master 로 병합

서로 다른 파일이라 충돌 안 남
이번에는 master 이 version3이랑 나란히 있는게 아니라 위로 올라감

Fast Forward 병합 vs 일반적인 병합
version3을 master 브랜치에 병합했는데 master 브랜치가 version3 옆이 아니라 위로 올라간 이유? 병합 방식에 따라 fast forward 병합과 일반적인 병합(merge)에서 커밋 히스토리가 다르게 처리되기 때문이다.
master 브랜치 체크아웃한 상태에서 version3 브랜치를 master에 병합하면, version3의 커밋이 master에 통합되면서 새로운 병합 커밋이 생성된다. 이 병합 커밋이 master 브랜치의 최신 커밋으로 올라가게 되며, master이 version3의 옆이 아니라 위로 이동 한다. (병합 커밋이 master 브랜치의 가장 최신 커밋으로 생성되니까)
반대로 fast forward형식으로 version3을 master에 병합하면 master이 위로 안올라오고 병합한 버전 옆에 나란히 위치한다.
fast forward 병합
fast forward 병합은 master 브랜치가 직선적으로 version3 브랜치의 커밋을 이어서 받아들일 수 있는 경우에 발생한다. 그러므로 충돌 위험도 적다. master 브랜치가 version3의 커밋들을 그대로 이어 받아서 반영하므로병합 커밋이 생성되지 않고, 두 브랜치가 나란히"보인다. 즉 master 브랜치가 version3 브랜치 커밋을 그대로 포함한 상태가 된다.
'Git&GitHUB' 카테고리의 다른 글
[깃/깃허브] 소스트리 연습 충돌 해결하기, reset, 브랜치 만들어서 커밋 되돌리기 (69) | 2024.12.17 |
---|---|
[깃/깃허브] 이클립스에 깃허브 연동, .gitignore 파일 생성해주는 사이트 (63) | 2024.12.14 |
[깃/깃허브] Learn Git Branching 에서 깃허브 브랜치 연습해보자 (58) | 2024.12.12 |
[깃/깃허브] 소스트리 사용해보기 (96) | 2024.12.10 |
[깃/깃허브] VSCode Git 10k 없애기 ( the git repository at XX has too many changes ) (7) | 2024.12.06 |

Git 저장소에 연결된 파일을 수정하면 수정 후에 아직 스테이징이나 커밋 안했을 때 코드 왼쪽에 조그맣게 세로줄이 뜬다.
이걸 Diff Decorations이라고 한다.
Diff Decorations는 파일이 Git 저장소에 연결되어 있을 대 파일의 변경된 부분을 색상이나 아이콘 등으로 표시해서 코드의 추가, 수정, 삭제 상태를 보여준다. 코드의 줄 번호 왼쪽 여백(Gutter)에 나오고 클릭하면 상태 변화를 보여준다.
초록색 줄 : 새로 추가된 코드
Git에 스테이징되거나 커밋된 적이 없는 새로운 라인
노란색(주황색)줄: 기존 코드가 수정된 경우
빨간색: 삭제된 코드
Diff Decorations 활성화/비활성화 기본 설정 변경
Ctrl + , 또는 Cmd + ,를 눌러서 Settings 열기
검색창에 diffEditor.decorations 입력
설정에서 Editor > Diff: Decorations를 활성화 / 비활성화
다이렉트 JSON 설정: settings.json 파일에서
"diffEditor.decorations": false 로도 가능
What is meant by the colourful line markings on the left side of the editor in VS Code?
Here are a few images showing what I'm referring to. They come in different colours, for example red blue and green below: Red line markings Blue line markings zoomed in Green line markings zoome...
stackoverflow.com
Overwrite 는 기존 데이터를 새로운 데이터로 대체하는 작업
Copy Reverting은 파일을 복사하여 이전 상태로 되돌리는 작업
현재 hello.md 수정까지 했는데 여기서 뭔가 마음에 안들어서 이전 작업내용으로 일단 되돌아야 할 것 같다.
그리고 다시 시작해야 할 것 같다. 현재 수정한 내용은 그대로 놔두고 hello.md 파일 생성에서 새로 시작하고 싶다.
hello.md 우클릭 > 브랜치 생성

Git 브랜치 병합하기
병합(merge)이란?
하나의 브랜치를 현재 브랜치와 합치는 것을 병합(merge) 라고 한다.
현재 브랜치는 헤드(HEAD) 브랜치라고 함
예를 들어서 HEAD브랜치가 main이고 여기서 version2 브랜치를 병합하면 version2의 내용이 main에 반영되게 된다.
병합시 자주 발생하는 상황?
Learn Git Branching
https://learngitbranching.js.org/?locale=ko
Learn Git Branching
An interactive Git visualization tool to educate and challenge!
learngitbranching.js.org
여기서 연습 가능


병합(merger)과 충돌

main을 선택하고 version3를 메인에 병합하려고 하는데 충돌이 났다.

불필요한 부분 수동으로 지운다.

소스트리로 가서 커밋

푸쉬하고 이제 버전 3는 삭제해도 된다.
그런데 푸쉬가 안된다.

오류메세지
git -c diff.mnemonicprefix=false -c core.quotepath=false --no-optional-locks push -v --set-upstream origin main:main Pushing to 깃저장소URL To 깃저장소URL ! [rejected] main -> main (non-fast-forward) error: failed to push some refs to 깃저장소URL hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. If you want to integrate the remote changes, hint: use 'git pull' before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details.
오류 메시지는 로컬 브랜치와 원격 브랜치 간의 히스토리가 일치하지 않을 때 발생한다. 즉, 원격 main 브랜치가 로컬 main 브랜치보다 더 앞서 있는 경우이다. 이 문제를 해결하려면 원격 브랜치의 변경 사항을 통합해야 한다.
Fetch

Pull > 원격 브랜치를 origin/main 로 설정 > Pull with rebase 하고 Push

이제 version3을 삭제해 주었다.

지금 헷갈리는 건 origin/main부분
계속 origin/main 은 병합이 안되고 아래쪽에 있길래 찾아봤다.
origin/main은 GitHub 같은 원격 저장소에 있는 main 브랜치의 최신 상태 <
로컬 브랜치와 원격 브랜치의 상태가 다를 수 있기 때문에,
origin/main은 로컬에서 직접 작업한 내용이 아니라, GitHub에 마지막으로 푸시된 내용을 나타낸다.
깃허브에 main을 pull 해주니까 저 아래에 있던 origin/main이 다시 맨 위로 올라옴

코드뭉치 버리기
체크아웃한 브랜치는 병합 대상이 아니라 병합이 일어날 브랜치이다.
즉, 병합을 실행하려면 먼저 병합 대상이 될 브랜치를 체크아웃해야 한다.
따라서, main 브랜치에 version4 브랜치를 병합하려면,
먼저 main 브랜치로 체크아웃한 후 version4 브랜치를 병합해야 한다.
그럼 main으로 version4가 올라와서 main 에 병합
체크아웃 하면 이렇게 앞에 동그라미가 생김

master에 체크아웃 하고 version4 눌러서 병합하면 version4가 master로 병합됨
근데 이 때 version4가 내려가는게 아니고 master이 version4 옆으로 올라옴

origin/main 과 master이 함께 있었는데 master을 체크아웃한 상태에서
version4 우클릭> 병합 해 줌
그럼 결과는 위와 같다 (fast-forward 상황)
이 상태에서 version3를 master 로 병합

서로 다른 파일이라 충돌 안 남
이번에는 master 이 version3이랑 나란히 있는게 아니라 위로 올라감

Fast Forward 병합 vs 일반적인 병합
version3을 master 브랜치에 병합했는데 master 브랜치가 version3 옆이 아니라 위로 올라간 이유? 병합 방식에 따라 fast forward 병합과 일반적인 병합(merge)에서 커밋 히스토리가 다르게 처리되기 때문이다.
master 브랜치 체크아웃한 상태에서 version3 브랜치를 master에 병합하면, version3의 커밋이 master에 통합되면서 새로운 병합 커밋이 생성된다. 이 병합 커밋이 master 브랜치의 최신 커밋으로 올라가게 되며, master이 version3의 옆이 아니라 위로 이동 한다. (병합 커밋이 master 브랜치의 가장 최신 커밋으로 생성되니까)
반대로 fast forward형식으로 version3을 master에 병합하면 master이 위로 안올라오고 병합한 버전 옆에 나란히 위치한다.
fast forward 병합
fast forward 병합은 master 브랜치가 직선적으로 version3 브랜치의 커밋을 이어서 받아들일 수 있는 경우에 발생한다. 그러므로 충돌 위험도 적다. master 브랜치가 version3의 커밋들을 그대로 이어 받아서 반영하므로병합 커밋이 생성되지 않고, 두 브랜치가 나란히"보인다. 즉 master 브랜치가 version3 브랜치 커밋을 그대로 포함한 상태가 된다.
'Git&GitHUB' 카테고리의 다른 글
[깃/깃허브] 소스트리 연습 충돌 해결하기, reset, 브랜치 만들어서 커밋 되돌리기 (69) | 2024.12.17 |
---|---|
[깃/깃허브] 이클립스에 깃허브 연동, .gitignore 파일 생성해주는 사이트 (63) | 2024.12.14 |
[깃/깃허브] Learn Git Branching 에서 깃허브 브랜치 연습해보자 (58) | 2024.12.12 |
[깃/깃허브] 소스트리 사용해보기 (96) | 2024.12.10 |
[깃/깃허브] VSCode Git 10k 없애기 ( the git repository at XX has too many changes ) (7) | 2024.12.06 |