Post

Git CLI & GUI

1
2
> git --version
git version 2.47.1
1
> git config --global init.defaultBranch main
1
2
3
> git add targetFilename

> git add .

0

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
> vi .gitignore

# 이렇게 #를 사용해서 주석

# 모든 file.c
file.c

# 최상위 폴더의 file.c
/file.c

# 모든 .c 확장자 파일
*.c

# .c 확장자지만 무시하지 않을 파일
!not_ignore_this.c

# logs란 이름의 파일 또는 폴더와 그 내용들
logs

# logs란 이름의 폴더와 그 내용들
logs/

# logs 폴더 바로 안의 debug.log와 .c 파일들
logs/debug.log
logs/*.c

# logs 폴더 바로 안, 또는 그 안의 다른 폴더(들) 안의 debug.log
logs/**/debug.log
1
2
3
> git commit

> git commit -m "Init Commit"
1
>git log

1

1
>git diff

2

1
2
3
4
5
>git add .
>git commit -m "Message"

# untracked 된 파일이 없을때 add & commit 한번에 처리됨
>git commit -am "Message"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 마지막 커밋 상태로 돌아가고 싶을때
>git reset --hard


# 돌아가고 싶은 커밋으로 reset
>git reset --hard 5fc64f1d7c3f2f7c0fb0996dd7040ac8f3eee2f9


# 특정커밋만 원복하는 커밋을 생성 revert
>git revert 3cfb9d5b419d362b7690401676de5bd481bad7aa


# 특정커밋을 원복하고 커밋을 생성하지 않는 revert
>git revert --no-commit 3cfb9d5b419d362b7690401676de5bd481bad7aa

상황 1

leopards.yaml 이 추가되고 수정된 내역이 있는데

leopards.yaml 추가했던 commit 를 revert 하려고 할때 뜨는 이슈

3

4

1
2
3
4
5
# 브랜치 생성
>git branch add-coach

# 전체 브랜치 확인
>git branch

5

1
2
# 지정한 브랜치로 변경
>git switch add-coach

6

1
2
#브랜치 생성하면서 해당 브랜치로 변경
>git switch -c new-teams

7

1
2
3
4
5
6
7
8
# 브랜치 이름 변경
>git branch -m to-delete to-rerase

# 브랜치 삭제
>git branch -d to-erase

# 지울 브랜치에 다른 브랜치로 미적용된 커밋이 남아 있을때 강제삭제
>git branch -D to-erase
1
2
# 전체 브랜치 log 편하게 보기
> git log --all --decorate --oneline --graph

8

9

Merge

2개의 브랜치를 합친 새로운 커밋을 마지막에 생성한다.

기존 브랜치가 남아 있다.

새로운 커밋 있기에 reset 으로 과거로 돌아갈 수 있다.

Rebase

2개의 브랜치를 합친 새로운 커밋을

1
2
3
4
# Merge 머지
# add-coard -> main 에 머지하려면
# branch 를 main 으로 이동후 아래 명령어 사용
> git merge add-coach

10

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Rebase 리베이스
# new-teams -> main 브랜치로 rebase 하려면
# 머지와 반대로 new-teams 로 브랜치 이동후 아래 명령어 사용
> git switch new-teams
> git rebase main
# new-teams 가 main 라인의 최근 커밋으로 들어가게 된다.
# main 브랜치는 new-teams rebase 한 커밋보다 뒤에 있기에
# new-teams -> main 에 머지 해야 한다.
# 그럴려면 다시 브랜치를 main 으로 변경해야 한다.
> git switch main
> git merge new-teams

# new-teams 브랜치를 삭제한다.
> git branch -d new-teams

11

12


13

1
2
3
4
5
6
7
8
9
10
11
#merge 는 main브랜치에서 feature 당겨온다
#rebase 는 feature브랜치를 main에 rebase한다.
#위치가 서로 반대이다. 헤깔리지 말자.

# conflict-1 을 main 에 merge 시도
>git switch main
>git merge conflict-1

자동 병합: gittest/folder/tigers.yaml
충돌 (내용): gittest/folder/tigers.yaml에 병합 충돌
자동 병합이 실패했습니다. 충돌을 바로잡고 결과물을 커밋하십시오.

14

HEAD 나 자신 main 브랜치

conflict-1 머지하려는 브랜치

1
2
# 진행중인 머지 취소
>git merge --abort

15

16

충돌 부분 수정후

1
2
3
# 충돌된 파일 수정후
>git add .
>git commit

17

18


1
2
3
4
5
6
#conflict-2 를 main 에 rebase 해보자

>git switch conflict-2
>git rebase main
# rebase 취소하기
>git rebase --abort

19

1
2
3
4
5
6
7
8
9
#rebase 는 커밋 하나하나 적용되기 때문에 커밋마다 충돌시 각각
#처리해줘야 한다.

#충돌되는 코드 수정후 저장
> git add .
> git rebase --continue

#아직 충돌하는 커밋이 남아 있다면 아래처럼 나온다.
#더이상 rebase 할 커밋이 없다면 아래처럼 Successs 완료가 뜬다.

20

21

1
2
3
4
#rebase 가 완료된후에 main 을 보면 conflict-2 뒤에 있다.
> git switch main
> git merge conflict-2
# main 에 conflict-2 를 당겨와야 한다.

22

1
2
3
#그후 conflict-1 / conflict-2 브랜치를 삭제하면 아래와 같다.
> git branch -d conflict-1
> git branch -d conflict-2

23


Git merge/rebase test 연습문제

iOS 앱 프로젝트

gittest.zip

24

  1. conflict-1 을 main 에 merge 하시오

    충돌시 conflict-1 을 따름

1
2
3
> git branch main
> git merge conflict-1
> git branch -d confilct-1
1
2
3
team: Tigers
manager: Deborah
coach: Grace

25

  1. conflict-2 를 main 에 rebase 하시오.

    충돌시 conflict-2 를 따름

1
2
3
4
5
6
7
> git branch conflict-2
> git rebase main
> git add .
> git rebase --continue
> git branch main
> git merge confilct-2
> git branch -d confilct-2

아래 와 같이 나와야 한다.

26

1
2
3
4
5
6
7
team: Leopards
manager: Nora
coach: Melissa

team: Panthers
manager: Sebastian
coach: Raymond
This post is licensed under CC BY 4.0 by the author.

Trending Tags