<기본 실습>
- 프로젝트 폴더를 만든다
- 저장소를 만든다: gin init
- 파일을 만들고 두 개의 커밋을 만든다
work1.txt => work1, work2.txt => work2, work3.txt=> work2로 commit
git status, gitit add FILE_NAME, git commit -m "COMMIT MESSAGE"
- 시간 여행
git log --oneline --graph
git chekout COMMIT_ID
git checkout master하면 시간 여행 끝남
- 명령어로 exp branch 만들고 작업할 수 있도록 checkout한다
git branch exp (현재 HEAD가 가리키는 걸 새로운 branch로) => HEAD가 master을 가리킴. master에서 진행됨
git checkout exp (HEAD가 exp를 가리킴)
- 서로 다른 branch에서 작업한다
exp branch에서 exp.txt 만들고, master branch에서 master.txt 만들고
각각 exp1, master1로 commit
- 병합한다
git merge exp (vi 편집기처럼 esc키 + :wq)
상태 확인하기
git status : commit 이전 상태 확인
git log / git log --oneline : commit 상태 확인
git reflog
reflog란?
reflog는 git에서 가리키는 referenced commit이 변경된 내역이다.
reflog를 기록하는 것은 대표적으로 HEAD와 branch 두 가지이다.
Source control 사용하기
source control: M 누르면 변경 사항 확인 가능 (커밋 안 한 상태에서) git diff
Untracked / Tracked
- git add를 한번이라도 한 파일은 tracked 상태
- git commit -a 옵션은 tracked 상태의 파일만 커밋에 포함시킨다.
- untracked 는 명시적으로 git add 해줘야 한다. 반대로 git add를 한 번이라도 했다면 git이 추적기능을 붙여 auto adding이 가능해진다.
- .gitignore
- git add . 절대로 해서는 안됨
add의 3대 상태
1. 커밋 대기상태
2. Untracked를 tracked로 만든다.
3. 충돌 해결을 깃에게 알려준다.
git commit -am
Checkout을 통해 특정 커밋시점으로 돌아가기
HEAD를 a9fbe30 시점으로 옮기고자 한다면
$ git checkout a9fbe30
$ git log --oneline --all
master는 마지막 작업을 가르키고 HEAD는 현재 작업을 가르킨다.
+ attached / detached
HEAD -> 브랜치(ex.MASTER) -> 특정 커밋 순서로 commit을 가리키는 상태 : ‘attached HEAD’ 상태(state)라고 한다.
Detached HEAD란 HEAD가 브랜치를 통해 간접적으로 commit을 가리키지 않고, 직접 커밋을 가리키는 것을 말한다.
→ HEAD가 다시 main을 가르키도록 만들려면
main 브랜치로 checkout하면 된다.
Detached HEAD란?
- HEAD가 특정 branch가 아닌 특정 commit을 직접 참조하고 있는 상태를 말한다.
- Detached HEAD 상태에서 새롭게 생성된 commit은 참조하는 branch가 없기 때문에
다른 branch로 checkout 하게 되면 해당 commit은 가비지 콜렉터에 의해 삭제됩니다.
=> 실험할 때 사용
1. 실험이 성공하고 끝이 나면 master가 exp를 병합한다
- 'merge' into current branch 새로운 version의 부모는 master, exp이며 master는 새로 만들어진 version을 가리킨다.
- 병합을 취소하려면 'reset' current branch
2. exp가 master를 병합한다. exp가 master에 있는 작업물을 중간 중간 없데이트한다.
- 즉, 수시로 master에 있는 수정사항을 exp로 자주 가져와라
- exp가 새로만든 내용을 따라감
exp는 삭제할 때까지 사라지지 않음
Checkout(시간 여행) VS Reset(복원)
- git checkout BRANCH_NAME, git checkout master 로 시간 여행
- HEAD가 master을 가리킴 (HEAD => Master => 다른 상태들)
- checkout은 HEAD를 옮기고 reset은 HEAD가 가르키는 BRANCH를 옮긴다
- reset은 우리가 마지막으로 작업한 브랜치를 복원하거나 삭제한다. master은 reset을 통해 어디로든 갈 수 있다.
- HEAD=> branch 상태에서 git reset --hard로 이전 commit으로 돌릴 수 있다.
# master가 commitId에 해당하는 버전을 가리킴
git reset --hard (commitId)
# head가 원하는 commitId에 해당하는 버전을 가리킴
git checkout (commitId)
git reset --hard COMMIT_ID # Branch(ex.master)를 해당 commit_id로 이동
if(attached){
HEAD의 Branch가 움직임
} else {
== checkout # Head를 Branch로 이동
}
$ git reset --hard 3f729
다시 되돌리고 싶을 때는 git reflog로 이전 커밋ID를 확인한 후 다시 reset 하면 된다.
$ git reflog
$ git reset --hard f536088
.gitignore 파일
commit하고 싶지 않은 파일명을 .gitignore 파일에 작성한다.
Git Graph 사용
Create Branch 후 check out 옵션 선택 git checkout -b exp
- 파란색 Branch 더블 클릭하면 checkout된다
예제) exp라는 branch를 만들고 exp.txt 만드는 작업 후 commit => master branch로 돌아와서 master.txt 만드는 작업 후 commit
터미널에서는 git log --oneline --all --graph
Merge
git checkout master하고 gie merge exp하면 아래와 같음
단축키 만들기
git config --global alias. [원하는 단축키] "[바꾸려는 내용]"
단축키 수정하려면 vim ~/.gitconfig
Merge와 Conflict 뽀개기
각 브랜치에서 파일 수정하고 commit한 후
git checkout master
git merge exp 하면 아래와 같음
conflict 수정한 다음에 git add common.txt / git commit -m "COMMIT MESSAGE"
Remote
git push --set-upstream origin master 한 번은 인증해야함
'AI TECH' 카테고리의 다른 글
Advanced Self-supervised Pre-training Models: GPT2&3, ALBERT, ELECTRA (0) | 2022.10.20 |
---|---|
Self-supervised Pre-training Models: GPT-1, BERT (0) | 2022.10.20 |
[퀴즈] Transformer 결과 구하기, LSTM 모델 파라미터 수 구하기 (0) | 2022.10.18 |
Word Embedding: Word2Vec, GloVe, TF-IDF (0) | 2022.10.11 |
[실습] 전처리 Corpus cleaning (0) | 2022.10.10 |