$ git config user.name "사용자 이름"
$ git config user.email "이메일 주소"
$ git config core.editor "사용 에디터"
$ git config --list
#. --global 옵션
사용자 홈에 저장되는 옵션으로 해당 옵션을 사용하게 되면 모든 git프로젝트에서 global 설정된 이름 이메일 등을 사용할 수 있다.사용예시 : $ git config --global user.name "사용자 이름"
Remote repository를 내 Local repository로 가져오는 작업
$ git clone <Remote repository 주소>
staging area와 untracked files을 확인할 수 있다.
어떤 파일이 충돌하고 있는지를 확인 할 수 있다.
#여기서 잠깐?! track, untracked가 뭘까?
Track : 추적하다. → Git에서 파일의 버전 관리를 위해 해당 파일을 추적하고 있는 '상태'를 의미한다.
◐ Tracked :
한 번이라도 commit을 한 파일의 수정 여부를 계속 추적하는 상태
◐ Tracked area : Git에 의해 관리되는 영역
◐ Untracked :
한 번도 git에서 버전 관리를 하지 않았기 때문에 수정 내역을 추적하지 않는 상태
◐ Untracked area :
Git이 관리하고 있지 않은 영역
현재까지 commit 된 내역들을 터미널 창에서 확인할 수 있습니다.
#. --stat 옵션
commit에 관련된 파일까지 함께 기록 확인
Local repository와 연결된 repository들을 보여준다. (이름만)
#. -v 옵션
현재 Local Repository에 연결되어있는 모든 Remote Repository 목록을 확인할 수 있다.
#. remote add
새로운 git repository를 연결한다.
$ git remote add origin <repository 주소>
$ git remote add friend <repository 주소>
#. remote rm
기존에 연결된 git repository를 제거할 수 있다.
$ git remote rm origin
$ git remote rm friend
작업 공간에 local Git repository를 생성한다.
또는 새로운 Repository를 초기화 하는데 사용된다.
untracked한 파일을 staging area로 이동시켜 주는 명령어이다.
$ git add <파일명>
#. add .
모든 untracked한 파일을 staging area로 이동시켜 주는 명령어이다.
commit 되지 않은 Local Repository의 변경 사항을 취소할 수 있다.
$ git restore <파일명>
변경된 사항을 기록할 수 있는 명령어이다. (변경 이력, 변경 주체, 시간)
#. commit -m 'commit messages'
commit messages를 입력할 수 있는 명령어이다. commit messages는 최대한 알아보기 쉽고
정교하게 작성해야 한다.
Local에서 commit한 내용을 취소할 때 사용한다.
$ git reset HEAD^ : 가장 최근의 commit을 취소한다.
$ git reset HEAD^^ : 가장 최근 2개의 commit을 취소한다.
$ git reset HEAD~3 : 가장 최근 3개의 commit을 취소한다.
#. reset에는 3개의 옵션이 있습니다!
Local에서 변경, commit된 사항을 Remote Repository에 업로드할때 사용한다.
Push가 끝나면 변경된 사항에 대해 Pull Request를 진행한다.
$ git push origin main
다른 사람의 원격 repository에 있는 변경사항을 내 Local repository로 가져올때 사용한다.
$ git pull friend main
#. Pull 명령어 사용시 발생하는 충돌 상황?
◐ 충돌이 발생하는 이유?
병합 과정에서 동일한 라인에 동류의 내용이 포함되어 있을때 발생하며 충돌 발생시
병합이 되지 않는다.
따라서 충돌 상황을 이해하고 해결 할 수 있어야 한다.
# 충돌 사례 예시
<<<<<<<<<<<
내 소스코드
==========
타인의 소스코드
>>>>>>>>>>>
#. 해결방법?
해결 방법은 의외로 쉽다.
두 소스 코드 모두 정상적으로 작동한다면
두 소스 코드중 한 가지를 취사 선택하여 파일을 수정하는 것으로 충돌을 해결할 수 있다.
이후 add 명령어를 통해 해당 충돌 문제가 해결되었다는 것을 git에 전달해야 하고
충돌상황에서는 자동으로 commit 메시지가 생성되기 때문에 commit 명령어를 통해
생성된 메시지를 기록해야 한다.
브랜치란 나누어진 각각의 독립적인 작업 영역이다.
branch를 분리함으로써 다른 사람의 작업에 영향을 주지 않고 또 영향을 받지 않는 상태로
안전한 작업을 진행할 수 있다.
즉 Branch란 각각의 '작업 흐름의 단위'라고 생각하면 된다.
♠ 생성
- branch <새로운 브랜치 이름> : <새로운 브랜치 이름>을 가진 브랜치 생성
- switch –c <새로운 브랜치 이름> : <새로운 브랜치 이름>을 가진 브랜치 생성 후 해당 브랜치로 전환
- checkout –b <새로운 브랜치 이름> : <새로운 브랜치 이름>을 가진 브랜치 생성 후 해당 브랜치로 전환
♠ 확인
- branch : 브랜치 목록 확인
- branch -v : 브랜치 목록과 각 브랜치의 최근 커밋 확인
- log —branches —graph --decorate : 로그에 모든 브랜치를 그래프로 표현
♠ 삭제
- branch –d <삭제할 브랜치 이름> : 브렌치 삭제
- branch -D : 병합하지 않은 브랜치를 강제 삭제
♠ 전환
- switch <브랜치 이름> : <브랜치 이름>을 가진 브랜치로 전환
- checkout <브랜치 이름> : <브랜치 이름>을 가진 브랜치로 전환
♠ 병합
병합은 아래의 순서를 따른다.
병합의 모체가 될 브랜치로 이동한다.
병합을 진행한다.
$ git switch <병합의 모체가 될 브랜치 이름>
$ git merge <병합 당할 브랜치 이름>
fast-foward :
별도의 커밋을 생성하지 않고 병합하는 방식으로 두 작업이 하나의 브랜치로 이어질때 사용한다.
merge commit :
별도의 커밋을 생성하는 방식으로 두 작업이 하나로 이어지며 브랜치가 하나로 이어진다.
다만 변경 내용의 이력이 모두 남기에 이력이 복잡해진다.
rebase :
브랜치 통합이 목적이지만 특정 시점으로 브랜치가 가리키는 곳을 변경하는 기능을 한다.
♠ 기타
■ stash
아직 commit하지 않은 작업을 스택에 임시로 저장한다.