#깃
Git이란 소스코드를 효과적으로 관리하기 위해 개발된 '분산형 버전 관리 시스템'
Git은 원격 저장소와 로컬 저장소 두 종류의 저장소를 제공
1)원격 저장소(Remote Repository):
파일이 원격 저장소 전용 서버에서 관리되며 여러 사람이 함께 공유하기 위한 저장소입니다.
2)로컬 저장소(Local Repository):
내 PC에 파일이 저장되는 개인 전용 저장소입니다.
1.저장소 만들기
첫 번째, 아예 저장소를 새로 만들거나,
두번째, 이미 만들어져 있는 원격 저장소를 로컬 저장소로 복사해 올 수 있습니다
2.커밋
파일 및 폴더의 추가/변경 사항을 저장소에 기록하기 - 커밋메시지 필수
작업트리(작업하는 폴더) ->인덱스 -> 저장소
작업트리에서 인덱스(가상공간)에 기록 = 스테이징한다(stage)
3.푸시(Push) / 새로 만들었을 경우
내 PC의 로컬 저장소에서 변경된 이력을 원격 저장소에 공유하려면,
로컬 저장소의 변경 이력을 원격 저장소에 업로드해야 합니다. (Push - 원격저장소 = 로컬저장소)
원격 저장소에서 모두가 공유하고 있는 커밋은 기본적으로 다른 저장소의 이력에도 영향을 주므로
덮어쓰거나(overwrite) 임의로 변경하면 안된다.
4.클론 / 이미 작업된 것이 있을 경우
원격 저장소를 복제(Clone)
5.풀 / Pull
모두 같은 원격저장소에 푸시 했을경우 변경 내용을 내 로컬저장소에 적용 시키기
(원격 저장소에서 최신 변경 이력을 다운로드하여 내 로컬 저장소에 그 내용을 적용)
6.머지(merge)
pull한 저장소가 최신 버전이 아닌경우, 다른사람이 push한 경우 내 push 요청이 거부될때
merge(병합)를 해야한다. 그러지않을 경우 다른 사람이 push한 업데이트 내역이 사라지기 때문
※직접 머지해야 하는경우 / 원격 저장소와 로컬 저장소 약쪽의 파일의 동일한 부분을 변경한 경우 / 거부(rejected) 당함
<<<<<<<<
충돌이 발생한 부분
>>>>>>>>
위처럼 표기된다
===== 로 구분된 윗 부분이 로컬 저장소,
아랫 부분이 원격 저장소의 변경 내용
충돌 부분을 모두 수정하여 재 커밋한다.
-먼저 pull을 사용하여 원격 저장소의 최신 파일을 pull 한 후 충돌 부분 수정후 push 한다.
#브랜치(branch)
브랜치란 독립적으로 어떤 작업을 진행하기 위한 개념
다른 브랜치의 영향을 받지 않기 때문에, 여러 작업을 동시에 진행 가능
브랜치는 다른 브랜치와 병합(merge)함으로써 새로운 브랜치를 만들 수 있음
1)통합 브랜치(Integration Branch) / 배포 가능한 버전의 브랜치(모든 기능이 정상적으로 동작하는 상태)
-보통 master 브랜치를 통합 브랜치로 사용
2)토픽 브랜치(Topic Branch) / 통합 브랜치에서 버그를 수정하거나 기능을 추가할때 사용하는 브랜치 = 피처 브랜치(Feature branch)
-토픽 브랜치에서 특정 작업이 완료되면 다시 통합 브랜치로 병합하는 방식으로 진행
1.브랜치 전환
-작업할 브랜치를 선택 해야함 / 보통 master이나 다른 브랜치에서 작업하고 싶을 때는 체크아웃(checkout)을 실행하여
브랜치를 전환 할 수 있음
-체크아웃을 실행할 경우 마지막 커밋 내용이 작업트리에 펼쳐짐
-이후에 실행한 커밋은 전환한 브랜치에 추가됨
2.HEAD
-현재사용중인 브랜치의 선두부분(기본적으로 master의 선두부분)
-HEAD를 이동할 경우 사용하는 브랜치가 변경됨
-커밋을 지정할 때, '~(틸드, 물결기호)'와 '^(캐럿, 삽입기호)'을 사용하여 현재 커밋으로부터 특정 커밋의 위치를 나타냄
-브랜치 병합에서 원본이 여러개 있을 경우 몇번째 원본인지 지정가능
3.stash / 파일의 변경 내용을 일시적으로 기록해두는 영역
커밋하지않은 변경내용이나 추가파일이 인덱스와 작업트리에 남아있는 채로 전환할 때 전환된 브랜치에서도 변경이
있는경우 체크아웃 실패하게 된다.
이경우 이전 브랜치에서 커밋하지 않은 변경 내용을 커밋하거나 stash하여 변경 내용을 일시적으로 다른곳에 저장하여
출동을 피한 후 체크아웃 해야한다.
이 stash 에 저장된 변경 내용은 나중에 다시 불러와 브랜치에 커밋할 수 있다.
*merge <-> rebase 차이점! 확인하기

-rebase 의 경우 충돌 부분을 수정 한 후에는 commit 이 아니라 rebase 명령에 --continue 옵션을 지정하여 실행
-rebase 자체를 취소하려면 --abort 옵션을 지정
4.Pull request
브랜치 간의 병합을 위해 단순히 merge만을 사용하지 않고, 한 번의 리뷰를 거치도록 변경 사항을 '요청'하는 일
master 브랜치에 변경 사항을 병합하기 전에 코드를 리뷰하기 위한 용도
+release 브랜치는 실제 배포할 상태가 된 경우에 생성하는 브랜치
1)git branch : 브랜치 목록확인
2)앞 부분에 * 이 붙어있는 것이 현재 선택된 브랜치
3)git checkout 명령에 -b 옵션을 넣으면 브랜치 작성과 동시에 체크아웃 실행
4)git branch 명령에 -d 옵션 - 삭제하기
5)git add - 추가 후 git commit 하기
+git log : 이전 로그를 확인 할 수 있음
-'master'는 로컬 저장소의 'master' 브랜치, 'origin/master'는 원격 저장소 'origin'의 'master' 브랜치를 나타냄
-로컬 저장소의 'master' 브랜치에서도 변경 사항이 생긴 경우 pull하여 소스를 병합 하거나 수동으로 해결 후
직접 commit 한다.
-pull을 실행하면 원격저장소의 내용을 가져와 자동으로 병합을 실행하게 되나 내용 확인만 할경우에는
fetch 명령어를 사용한다.(fetch 를 실행하면, 원격 저장소의 최신 이력을 확인)
pull = fetch + merge
#주석(tag)
일반태크와 주석태그
'릴리스 브랜치(Release branch)'에서는 주석 태그를 사용하여 상세한 정보를 포함하는 태그를 사용하고,
로컬에서 일시적으로 사용하는 '토픽 브랜치(Topic branch)'에서는 이름만 만들어 붙이는 일반태그를 사용
※태그 이름을 지정하여 checkout 하거나 reset 함으로써, 간단하게 과거의 특정 상태로 되돌릴 수 있다
1)git tag -a <tagname> : 태그 추가
2)git tag : 태그목록과 주석 내용 확인
3)git tag -d <tagname> : 태그 삭제
4) --amend 옵션을 지정하여 커밋할 경우 같은 브랜치 상에서 이전에 커밋했던 내용에 새로운 내용을 추가하거나
설명 수정 가능
5)revert 명령어로 이전 커밋 삭제하기
※이전상태로 돌릴때
1)커밋만 되돌리고 싶을 때 (soft)
2)변경한 인덱스의 상태를 원래대로 되돌리고 싶을 때 (mixed)
3)최근의 커밋을 완전히 버리고 이전의 상태로 되돌리고 싶을 때 (hard)
*cherry-pick : 특정 브랜치에 잘못 추가한 커밋을 올바른 브랜치로 옮기려고 할 때,
다른 브랜치의 커밋을 현재 브랜치에도 추가하고 싶을 때
*rebase i
1)push 하기 전에 이전의 커밋 내용을 정리하고자 할 때
2)그룹으로 묶을 수 있는 커밋들을 알기 쉽게 하나로 통합하려고 할 때
3)이전 커밋에 누락된 파일들을 나중에 추가하고자 할 때
*merge옵션 --squash
토픽 브랜치 안의 커밋을 한꺼번에 모아서 통합 브랜치에 병합하고자 할 때(해당 브랜치의 커밋 전체를 통합한 커밋이 추가)
##추천작업방식##
1. checkout branch ( 작업할 브런치로 이동 )
2. merge to origin/master ( 최신 origin/master 다운로드 )
3. 코드 작업 / 테스트 / 작업완료
4. fetch ( 작업하는동안 origin/master에 다른 push가 있는지 확인 )
5. merge to origin/master
6. commit and push ( 서버 GITLAB 내 브런치에 upload )
7. checkout master ( 마스터 브런치로 이동 )
8. merge to mybranch ( 서버GITLAB에 내 브런치와 동기화 )
9. synchronize workspace ( master 브런치상태의 IDE와 비교 )
10. commit and push
참고: https://backlog.com/git-tutorial/kr/
https://programmerk.tistory.com/15
누구나 쉽게 이해할 수 있는 Git 입문~버전 관리를 완벽하게 이용해보자~ | Backlog
누구나 쉽게 알 수 있는 Git에 입문하신 것을 환영합니다. Git을 사용해 버전 관리를 할 수 있도록 함께 공부해봅시다!
backlog.com
+++++Git Fork App
참고 : https://jayb-log.tistory.com/272
+++브랜치를 따서 작업중일때(체크아웃되어져있을 때) 오리진 서버에 변경사항이 있을경우
1.fast-forward = 오리진에 있는 변경사항을 내 최상위 로컬 브랜치에 전부반영
2.이부분을 내 브랜치에도 반영하고 싶을때에 내 최상위 로컬 브랜치 우클릭 현재 작업중인 내브렌치에 머지
하면 서버에서 변경된것이 작업중이 내브랜치에도 적용이 된다.
'😚Treasure' 카테고리의 다른 글
nvm (0) | 2023.01.27 |
---|---|
모든 환경에서 sass 사용하기 (0) | 2023.01.03 |
깃허브 (0) | 2022.08.16 |
쿠키삭제 없이 업데이트 하는방법 (0) | 2022.08.08 |
input file에서 카메라 호출 (0) | 2022.02.07 |