1. git이란? ( Version Control System )
어떻게 여러사람이 협업할것인가?
이력관리를 어떻게 할것인가?
분산 버전 제어 시스템
개발자가 파일 변경 사항을 추적하고 다른 개발자와 프로젝트에서 공동 작업가능.
파일의 여러 버전을 저장하는 대신 Git은 특정 시점에 전체 프로젝트의 스냅샷을 생성.
손쉽게 이전 버전의 프로젝트로 되돌리거나 기존 프로젝트에 영향을 주지 않고,분기하여 새 버전을 생성가능.
2. 지역저장소와 원격저장소
수행내용 | 명령어 |
깃 생성 | c:\test> git intit ( c:\test 경로에 숨김폴더로 .git폴더가 생성됨 ) |
깃 메일 등록 | c:\test> git config --global user.email “이메일주소“ |
이름 등록 | c:\test> git config --global user.name “ 이름or아이디” |
기타 | |
설정보기 | c:\test> git config --global --list |
도움말 | c:\test> git --help |
3. Staging Area란?
add시, 임시저장소 staging Area로 이동
commit시 하나의이력으로 남음
4. Staging Area관련 명령어
명령어 | 내용 |
Staging Area에 추가 |
> git add 파일이름
> git add 파일이름1 파일이름2
> git add 폴더이름 ( 지정된 폴더 내의 모든 파일 추가 )
> git add * ( 현재 폴더에 있는 모든 파일 또는 폴더 추가. 단, 빈폴더 제외)
> git add -u ( 커밋한 적이 있는 모든 파일 추가. 단,해당 파일이 커밋 이력에 있어야함)
|
Staging Area에서 삭제 |
> git rm --cached 파일이름 > git reset 파일 이름
> git reset ( 현재 폴더의 모든 폴더와 파일을 Staging Area에서 삭제 )
|
Working Directory 와 Staging Area 상태확인 |
> git status |
※ 주의 파일을 삭제할 때, working directory에서 직접 삭제하지말고, git을 통해 삭제해야 이력이 관리된다 |
5. commit 관련 명령어
명령어 | 내용 |
Commit 생성하기 |
> git commit -m "initial commit" ( ""안에 커밋에 대한 설명을 적는다. )
> git show HEAD (최근 커밋에 대한 상세 정보를 보여준다. 소문자 head도 가능 )
> git log
|
Commit 수정하기 (새로운커밋이만들어짐) |
> git commit --amend ( 최근 커밋의 내역을 볼 수 있다. 커밋 메시지 수정가능 )
> git commit --amend -sm "변경된 메시지" ( 커밋 메시지만 수정하고 싶을 때 )
|
취소 Commit 생성하기 | > git revert HEAD ( 최근 커밋을 취소하는 새로운 커밋을 생성 ) |
6. commit 수정하기 (reset --soft)
ex) 원래 3개를 커밋하려했지만, 실수로 2개만 커밋 했다면?
명령어 reset --soft , ( 커밋되었던게 Staging Area로 되돌아감 ) 그리고 다시 add → commit
만약 reset --soft 후, StagingArea에서 빼려면, reset 파일이름 그리고 다시 add → commit
ex) 2개의 커밋을 1개로 합치고자한다면?
reset --soft를 2번 하면 됨. 그리고 다시 commit
7. HEAD와 reset ( 커밋은 이전커밋을 가리키고 있음 )
Head란? 현재보고있는 커밋을 가리키는 포인터
ex) 만약 전단계로 가고 싶다면?
reset --hard
Working Directory까지 영향을주어 HEAD가 가리키는 포인터로 보게됨
ex) 만약 다시 전전단계로 가고 싶다면?
reset --hard를 한번더 입력하여
커밋으로 만들어놓은 이력을 왔다갔다 가능
ex) 만약 새로운 파일ddd.txt fmf 만들고 커밋 후, ccc.txt or bbb.txt로 돌아가고싶다면??
reset- hard를 하면 되지만, 이때 커밋ID를 정확히 알아야한다.
Tracked파일 Untracked 파일
Tracked파일 : git관리 O
UnTracked파일 : git관리 X
2개이상의 커밋을 하나의 커밋으로 합치기
8. git log와 커밋 ID
log관련명령어
내용 | 명령어 |
git log | 자세한 로그. 커밋 아이디가 길게 나옴 |
git log --oneline | 간략한 로그. 커밋 아이디가 짧게 나옴 (6자리) |
git shortlog | 아주 간략한 로그. 커밋 아이디가 안나옴 |
git show 커밋ID | 특정 커밋션의 상세정보 (브랜치 지정가능) |
gitk | gui화면으로 커밋정보를 보여줌 |
git reflog | HEAD가 가리켰던 (ref)커밋의 이력을 보여줌 |
git reflog 브랜치명 | 브랜치별로 reflog를 보여줌 |
git log -g | reflog를 상세히 보여줌 |
9. git이 파일을 관리하는 방식
파일이름 대신 object id로 파일을 관리
커밋의 실제 파일 대신 object id의 목록만 저장 (파일은 별도로 저장)
10. branch
가리키고 있는 Head를 옮길 때. __ 명령어 : git checkout 브랜치명
새로운 브랜치 만들기 __ 명령어 : git branch 브랜치명
11. fast-forward merge
main 브랜치를 dev브랜치와 merge ( 새로운 커밋이 만들어지지 않음!! )
명령어 : git merge 브랜치명 --ff
( git merge dev -ff )
12. no fast-forward merge
main 브랜치로 이동 ( 무조건 새로운 커밋이 만들어짐 !! )
명령어 : git merge dev --no-ff
( git merge 브랜치명 )
13. merge conflict
깃 초기화 : git init ( .git 숨김폴더를 윈도우에서 지우고 )
merge 중 충돌 발생
충돌발생!!
충돌부분 수정 후, add
아직 merge중이라고함 .
merge를 취소하려면 ? git merge --abort
merge를 재진행하려면 ? git merge --continue
git merge --continue 입력하여 진행
현재 충돌을 해결한 main브랜치가 최신이므로, dev 브랜치에서 는 작업불가
즉, dev로 checkout 하여 dev브랜츠를 main브랜치와 merge 해야한다.
main, dev 브랜치 모두 최신 커밋을 가리키고 있음
14. reset vs checkout ( detached HEAD )
15. git의 브랜칭 전략
참고 :
남궁성, 스프링의 정석
'Spring의 정석' 카테고리의 다른 글
SpringMVC 웹사이트(배포)5 (0) | 2023.04.04 |
---|---|
SpringMVC 웹사이트(intelliJ 에서 Git) 4 (0) | 2023.04.04 |
SpringMVC 웹사이트(기획) 1 (0) | 2023.04.02 |
게시판만들기 (댓글2, 대댓글)11~13 (0) | 2023.04.01 |
게시판만들기 (REST API와 Ajax, 댓글1)9~10 (0) | 2023.04.01 |