한다 공부
[Web] Git 본문
Git
깃이란? 버전 관리 시스템 중 하나이다.
git-scm.com에 접속하여 git 을 다운 받으면 git bash를 통해 윈도우 환경에서도 리눅스, 유닉스 명령어를 사용해 제어할 수 있다.
$ git init
: 현재 dir에 작업을 진행하겠다고 git에게 알려주는 명령어
$ vim f1.txt
: f1.txt라는 파일 생성. 버전 관리를 하기 위해 git에게 알려야 한다. 알리지 않으면 해당 파일 무시
$ git add f1.txt
: 해당 파일 버전 관리 시작
$ git status
: 관리 가능한 파일들의 상태를 알려준다
Commit
버전 관리
버전 = 의미있는 변화. 단위가 존재한다.
$ git config --global user.name 이름
$ git config --global user.email 이메일
: 버전을 누가 만들었는지 알려주기 위함. 처음 사용시 한 번만 입력하면 된다
$ git commit
: vim이 실행. 정보를 알려준다. 현재 버전의 메세지 작성 가능. 왜 버전이 변경 되었는지 이유 등을 작성
버전 관리 중인 f1.txt 파일을 수정시 단계
1. f1.txt를 수정한다
2. commit을 수정하기 전에, git add f1.txt를 실행해서 add를 해주어야 한다. (처음에도 add, 버전 만들 때에도 add)
3. commit을 수정한다
왜 commit 하기 전에 add를 해야할까?
add는 원하는 파일만 선택적으로 commit 할 수 있게 해주기 때문이다.
즉 add를 통해 commit 대기 상태로 들어갈 수 있다. = stage area 상태
stage : commit 대기 중인 파일들이 가는 곳
repository : commit이 된 결과들이 저장된 곳
commit은 고유한 주소가 있다.
(위 사진 상 commit~~블라블라~~되어있는 노란색 주소)
commit id = commit 메세지가 가리키는 버전의 고유한 주소
$ git log -p
: commit과 commit 사이의 소스코드 상의 차이점을 확인할 수 있다.
$ git diff 커밋1주소..커밋2주소
: git diff와 커밋1주소, 점 두개, 커밋2주소를 입력하면 commit사이의 소스코드 상의 차이점을 확인할 수 있다.
$ git diff
: 현재 내용과 전의 내용을 보여준다.
작업을 할 때, commit을 하기 전에 (코드들의 차이점을 통해) 작업한 내용에 문제가 있는지 마지막으로 리뷰할 기회를 준다.
commit 취소하기 (reset, revert)
$ git reset 커밋3주소 --hard
: 커밋이 5 4 3 2 1 이 있을 때, 현재 상태의 커밋이 5 이다. 그런데 5 4커밋을 지우고 현재 상태를 3으로 커밋 변경하고 싶다면? 커밋 3의 커밋 주소를 복사한 후 위 명령어를 수행하면 된다. (협업시) 공유하기 전에만 reset을 하고, 공유한 이후에는 절대로 reset을 하면 안된다.
$ git revert
: 커밋을 취소하면서 새로운 버전을 생성한다.
더 알고 싶다면?
$ git commit --help
: commit에 대한 설명과 옵션을 알려준다.
$ git commit -a
: 수정하거나 삭제한 파일을 자동으로 add 시켜줌.
add없이 commit 메세지를 입력할 수 있다.
$ git commit -am "메세지"
: 에디터를 키지 않고 commit에 메세지 를 추가할 수 있다.
Branch
report.txt 라는 파일을 작업하다가 고객용으로 따로 수정이 될 수도 있다.
혹은 해당 파일의 버전1 버전2 등 수정을 통해 버전이 바뀔 수 있다.
그러면 report2.txt, report3.txt .... (수정을 통한 버전 변경)
report_client.txt (고객용 파일을 위해 생성)
이런식으로 파일이 여러 분기로 나뉘게 되는데 이것을 branch라고 한다.
위와 같은 상황에서는 브랜치가 2개 존재하게 되는 것이다.
기본 브랜치는 master이다.
git brach 브랜치명 을 통해 새 브랜치를 생성할 수 있다. git branch exp 명령어를 통해 exp 라는 브랜치를 생성했다.
그 결과 master 브랜치, 즉 현재 브랜치를 그대로 복사해서 exp 브랜치가 생성되었다.
git checkout 브랜치명 을 사용하면 브랜치 변경이 가능하다.
git checkout exp 를 통해 master 브랜치에서 exp 브랜치로 넘어갈 수 있다.
여기서 만약 파일 f1.txt를 생성했다고 해보자
이 상태에서 master로 이동하면 f1.txt에는 반영되지 않은 것을 볼 수 있다.
f1.txt는 exp 브랜치에만 존재하게 된다.
이 갈라진 브랜치를 합치려면 어떻게 해야할까?
병합, 즉 merge를 하면 된다. exp를 master에 추가해보자. 우선 master로 checkout한 후에 git merge exp를 하면 된다
git log --branches --decorate --oneline 명령어를 통해 브랜치가 어떻게 분기되고 병합되었는지 간단하게 볼 수 있다.
git branch -d 브랜치명 을 하면, 해당 브랜치가 삭제된다.
stash
작업 중 다른 branch로 가야할 일이 생겼다. 커밋을 하기도 애매하고, 안하면 체크아웃을 못하고. 어떻게 해야할까?
stash를 이용하면 된다.
작업을 하다가 커밋을 하지 않았는데 체크아웃을 해서 브랜치를 옮기면, 작업하던게 다른 브랜치에도 영향을 주어 큰일이 발생한다. 그럴 때 stash를 사용한다.
git stash 를 하면 작업 중인 변경 사항들이 현재 워킹 디렉토리에 save가 된다.
이후 맘편하게 체크아웃하고, 다른 브랜치에서 작업을 하다가 다시 돌아오면 된다.
stash한 것을 불러오기 위해서는, git stash apply 를 하면 된다.
git stash list 를 하면 stash 한 것들이 보이고, 가장 위의 stash가 가장 최근에 처리한 것이고, apply 명령을 하면 제일 위에 있는 stash를 적용한다. git stash drop을 하면 가장 최근의 stash를 삭제한다.
git stash pop을 하면 stash를 apply한 이후에 drop을 하게 된다.
[참고자료] 생활코딩 지옥에서 온 Git
'Dev > Web' 카테고리의 다른 글
[Web] Cookie, Session (1) | 2023.05.13 |
---|---|
[Web] MySQL (0) | 2021.11.22 |
[Web] JavaScript (0) | 2021.11.09 |
[Web] CSS (0) | 2021.10.12 |
[Web] HTLM & Internet (0) | 2021.10.12 |