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
| > 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
| >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 하려고 할때 뜨는 이슈
1
2
3
4
5
| # 브랜치 생성
>git branch add-coach
# 전체 브랜치 확인
>git branch
|
1
2
| # 지정한 브랜치로 변경
>git switch add-coach
|
1
2
| #브랜치 생성하면서 해당 브랜치로 변경
>git switch -c new-teams
|
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
|
Merge
2개의 브랜치를 합친 새로운 커밋을 마지막에 생성한다.
기존 브랜치가 남아 있다.
새로운 커밋 있기에 reset 으로 과거로 돌아갈 수 있다.
Rebase
2개의 브랜치를 합친 새로운 커밋을
1
2
3
4
| # Merge 머지
# add-coard -> main 에 머지하려면
# branch 를 main 으로 이동후 아래 명령어 사용
> git merge add-coach
|
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
|
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에 병합 충돌
자동 병합이 실패했습니다. 충돌을 바로잡고 결과물을 커밋하십시오.
|
HEAD 나 자신 main 브랜치
conflict-1 머지하려는 브랜치
1
2
| # 진행중인 머지 취소
>git merge --abort
|
충돌 부분 수정후
1
2
3
| # 충돌된 파일 수정후
>git add .
>git commit
|
1
2
3
4
5
6
| #conflict-2 를 main 에 rebase 해보자
>git switch conflict-2
>git rebase main
# rebase 취소하기
>git rebase --abort
|
1
2
3
4
5
6
7
8
9
| #rebase 는 커밋 하나하나 적용되기 때문에 커밋마다 충돌시 각각
#처리해줘야 한다.
#충돌되는 코드 수정후 저장
> git add .
> git rebase --continue
#아직 충돌하는 커밋이 남아 있다면 아래처럼 나온다.
#더이상 rebase 할 커밋이 없다면 아래처럼 Successs 완료가 뜬다.
|
1
2
3
4
| #rebase 가 완료된후에 main 을 보면 conflict-2 뒤에 있다.
> git switch main
> git merge conflict-2
# main 에 conflict-2 를 당겨와야 한다.
|
1
2
3
| #그후 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
|