1
2
| > git --version
git version 2.47.1
|
1
| > git config --global init.defaultBranch main
|
1
2
3
| > git add targetFilename
> git add .
|
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
32
33
34
35
36
37
| > 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
2
3
4
5
6
| >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
15
16
17
18
|
## 마지막 커밋 상태로 돌아가고 싶을때
>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 하려고 할때 뜨는 이슈
1
2
3
4
5
6
7
|
## 브랜치 생성
>git branch add-coach
## 전체 브랜치 확인
>git branch
|
1
2
3
|
## 지정한 브랜치로 변경
>git switch add-coach
|
1
2
3
|
##브랜치 생성하면서 해당 브랜치로 변경
>git switch -c new-teams
|
1
2
3
4
5
6
7
8
9
10
11
|
## 브랜치 이름 변경
>git branch -m to-delete to-rerase
## 브랜치 삭제
>git branch -d to-erase
## 지울 브랜치에 다른 브랜치로 미적용된 커밋이 남아 있을때 강제삭제
>git branch -D to-erase
|
1
2
3
|
## 전체 브랜치 log 편하게 보기
> git log --all --decorate --oneline --graph
|
Merge
2개의 브랜치를 합친 새로운 커밋을 마지막에 생성한다.
기존 브랜치가 남아 있다.
새로운 커밋 있기에 reset 으로 과거로 돌아갈 수 있다.
Rebase
2개의 브랜치를 합친 새로운 커밋을
1
2
3
4
5
6
|
## Merge 머지
# add-coard -> main 에 머지하려면
## branch 를 main 으로 이동후 아래 명령어 사용
> git merge add-coach
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
## 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
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
##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에 병합 충돌
자동 병합이 실패했습니다. 충돌을 바로잡고 결과물을 커밋하십시오.
|
HEAD 나 자신 main 브랜치
conflict-1 머지하려는 브랜치
1
2
3
|
## 진행중인 머지 취소
>git merge --abort
|
충돌 부분 수정후
1
2
3
4
|
## 충돌된 파일 수정후
>git add .
>git commit
|
1
2
3
4
5
6
7
8
|
##conflict-2 를 main 에 rebase 해보자
>git switch conflict-2
>git rebase main
## rebase 취소하기
>git rebase --abort
|
1
2
3
4
5
6
7
8
9
10
11
12
|
##rebase 는 커밋 하나하나 적용되기 때문에 커밋마다 충돌시 각각
#처리해줘야 한다.
##충돌되는 코드 수정후 저장
> git add .
> git rebase --continue
##아직 충돌하는 커밋이 남아 있다면 아래처럼 나온다.
#더이상 rebase 할 커밋이 없다면 아래처럼 Successs 완료가 뜬다.
|
1
2
3
4
5
6
|
##rebase 가 완료된후에 main 을 보면 conflict-2 뒤에 있다.
> git switch main
> git merge conflict-2
## main 에 conflict-2 를 당겨와야 한다.
|
1
2
3
4
|
##그후 conflict-1 / conflict-2 브랜치를 삭제하면 아래와 같다.
> git branch -d conflict-1
> git branch -d conflict-2
|
Git merge/rebase test 연습문제
iOS 앱 프로젝트
gittest.zip
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
|
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
|
아래 와 같이 나와야 한다.
1
2
3
4
5
6
7
| team: Leopards
manager: Nora
coach: Melissa
team: Panthers
manager: Sebastian
coach: Raymond
|