Git : 개발을 진행하며 작성하는 소스코드가 업데이트 되는 버전을 기록하고 관리할 수 있는 버전관리 시스템 ( 로컬)
Github : Git으로 관리하는 프로젝트를 호스팅하고, 시공간에 제약이 없이 협업할 수 있는 온라인 서비스 (원격 저장소)
$ git config --global user.eamil "my eamil"
$ git config --global user.name "myname"
$ git config -l ### 등록된 config의 정보 확인
$git remote add origin "레파지토리 주소"
$git remote set-url <name> <newurl> # 원격 저장소 변경하는 명령어
처음 명령어를 통해서 레파지토리와 로컬저장소를 연결한다.
참고로 origin은 깃허브에 존재하는 repository 즉, remote를 뜻하는 단어입니다. 다만 remote에 origin이라는 이름을 붙인 것이다.
$git init # 깃 저장소 초기화
$git add (staging할 파일1) (staging할 파일2)
$git add . # 디렉토리내 모든 파일 올린다
$ git commit # staging area에서 local로 옮김
$ git commit -m "commit 후 출력할 메세지" # commit 후 메세지 출력
$ git commit -a # add와 commit를 동시 진행
$ git commit -am "commit 후 출력할 메세지" # -a와 -m을 함께 진행
▶tracked와 untracked
git은 자신이 추적하는 디렉토리내의 파일이더라도 무조건 감시하고 추적하는 것이 아닌, 한번 add한 파일이나 commit를 진행한 파일을 감시 및 추적한다.
▶Modified와 Unmodified
이는 변경된 파일이냐 변경이 진행되지 않은 파일이냐로 나뉜다
▶ Staged
$ git status # 상태 확인
$ git status -s # 상태를 간략히 확인
$ git log # commit history를 조회하는 명령어
$ git log --all # 모든 브렌치의 commit history를 조회
$ git log --online # 로그를 한줄 약식으로 보여준다(많이 사용).
$ git push origin master(main) # 로컬 저장소(local repository)에
있는 내용을 원격 저장소로 올린다.
$ git push -u origin master(main) # --set-upstram
$ git pull [원격저장소이름] [branch이름] # 원격저장소의 내용을 가져와 기존 파일과 병합
$ git clone "clone 할 저장소의 주소" [dir] # 저장소의 내용을 가져와서
로컬 저장소와 일치시킴
git fetch [원격저장소 이름] # 원격저장소에 변동사항만을 가져온다
git merge FETCH_HEAD # FETCH_HEAD에 업데이트된 원격저장소의
최신 커밋이 현재 브랜치에 병합된다
git fetch; git merge FETCH_HEAD
branch란 의미 그대로처럼 가지라고 생각하면 된다.
branch를 하는 이유는 나무처럼 가지가 부러지거나 한다고 해서 나무의 본 뼈대는 문제가 없다. 이것처럼 복사본을 만들어서 변경을 하고 실행을 하는 것이다. 그 후 이상이 없다면 원본 파일에 변경을 하는 것이다
$ git branch 브렌치명 # branch 생성
$ git switch 브렌치명 # branch 전환
$ git restore branch # 작업중인 파일 되돌린다
조금 더 정확하게 들어가보면 위에서 브랜치는 가지라고 표현하였다.
하지만 가지끼리 병합하는 것등에 대해서 정확하게 왜 사용하는지 궁금할 경우가 있다.
위에 그림처럼 마지막 commit가 f30ab라고 할때 master branch(자동으로 생성되는 branch)가 생성인 된다 (버전에 따라서 main) 이때 새로운 branch가 생성된다고 하자.
생성을 하게 되면 위의 그림처럼 새로운 testing branch가 생성된다.
위에 그림처럼 생성만 될뿐 위치는 아직 master이다.
이때 위치를 옮기고 싶으면 checkout 이나 switch를 사용하는데 switch를 사용하자
(checkout은 옵션도 많으면 다른 부분에서도 사용되고 switch와는 다르게 restore의 기능도 같이 내장 되어있기 때문이다)
어쨋든 testing으로 위치를 전환하고 다르게 작업하던 것을 작업후에 commit했다고 해보자.
위의 그림처럼 master의 위치는 f30ab로 고정되어있고 새롭게 87ab2가 생성이된다. 이후에 master에서 새롭게 commit를 하면 아래의 그림처럼 새롭게 c2b9e로 생성이 된다. 이처럼 서로 가치를 치며 작업을 수행하면서 나중에 병합을 하는 것이다.
하지만 이때 주의할 점은 만약 저상태에서 병합을 하면 에러가 날 확률이 증가한다.
만약 위의 상황이 아닌 master branch는 고정되어있고 a 와 b로 bracnh가 나누어져 나중에 병합을 한다고 가정해보자.
그럼 나중에 병합할 때 a를 먼저 병합하고 b가 병합을 했을 시 서로 다른 코드를 병합하면 문제가 발생하지 않지만 같은 코드 혹은 같은 줄을 병합을 할 경우에는 높은 확률로 conflict(충돌)가 발생한다. 충돌을 해결하는 방법은 다음에 다루도록 하겠다.