$git version
$git config --global user.name "<name>"
$git config --global user.email "<email>"
$git config --list -> git config 내용확인
$git init
".git"이라는 숨김 디렉토리가 생성됨 (스테이지와 저장소가 .git 디렉터리)
작업 트리 | 스테이지 | 저장소 |
---|---|---|
- 파일 수정, 저장 등의 작업을 하는 디렉터리 | 버전을 만들 파일이 대기하는 곳 | - 스테이지에 있는 대기파일을 버전으로 만들어 저장하는 곳 |
-작업 디렉터리(working directory)라고도 함 | - '스테이징 영역'이라고도 함 | - '리포지토리'라고도 함 |
-우리 눈에 보이는 디렉터리가 바로 작업 트리 | - 눈에 보이지 않음 | - 눈에 보이지 않음 |
$git status
저장소의 상태를 확인함
$git log
지금까지의 저장소의 상태를 확인함
옵션 | 내용 |
---|---|
-n | n개의 히스토리만 출력 |
-p | 각 commit의 diff 결과를 출력 |
-p -2 | 최근 2개의 diff 결과를 출력` |
--all | 모든 히스토리를 보여줌 |
--oneline | log의 내용을 한 줄로 간략하게 보여줌 |
--branches | 모든 branch에 대한 log 내용을 보여줌 |
--graph | 간략한 그래프 형태로 표시해줌 |
<branch#1>..<branch#2> | 두 브랜치의 차이를 보여줌 |
--reverse | 오래된 log부터 확인 |
$git add main.py
main.py를 스테이지에 추가
$git add*
모든 파일을 staged 상태로 만든다
$git commit -m "message"
$git commit -am "message"
-> add와 commit을 동시에 수행함
$git diff
$git diff <commit#1> <commit#2>
: 두 commit의 차이점을 비교$ git checkout <commit>
$git log --all
을 통하여 이후 버전 확인 가능(HEAD -> master)
의 의미
1. master 브랜치가 가장 최신 커밋을 가리킴
2. HEAD가 master 브랜치를 가리킴
3. HEAD는 여러 브랜치 중에서 현재 작업중인 브랜치를 가리킴
$git branch <branch name>
브랜치 생성
$git checkout <branchname>
브랜치 이동 HEAD가 가리키는게 바뀜
$git checkout -b <branch name>
= $ git branch <branch name> + $ git checkout <branch name>
$git merge <branch name>
자동병합 or 충돌$git branch -d <branch name>
해당 브랜치 삭제하면 끝$git branch -d <branch name>
$git branch -D <branch name>
commit 순서에 따른 되돌리기 정도
1. 파일 수정 (edit files)
2. 수정된 파일 add ($git add*
)
3. add된 파일들을 commit ($git commit -m "message"
)
옵션 | 내용 | git cycle | 되돌리기 정도 |
---|---|---|---|
soft | 변경 이력은 모두 삭제하지만 변경 내용은 남아있음 | stage 상태 | 3 변경 |
mixed | 변경 이력은 모두 삭제하지만 변경 내용은 남아있음 | modified 상태 | 2,3 변경 |
hard | 변경 이력은 모두 삭제하고, 변경 내용도 삭제 | 이전 커밋의 unmodified 상태 | 1,2,3 |
--force
옵션을 통해서 강제로 overwrite가 가능특정 커밋을 취소하는 커밋 생성함, 원격 저장소(github)를 활용할 경우에는 reset보다는 revert를 활용하자
$ git revert HEAD
--no-edit
: 커밋 메시지 작성 X$ git revert <commit#1> ... <commit#2>
--no-edit
: commit 메시지 작성 X$ git checkout <file>
: 특정 <file>
의 수정사항을 커밋상태로 되돌림
$ git checkout .
: 모든 파일의 수정사항을 커밋상태로 되돌림
$ git checkout <commit ID>
: HEAD가 가리키는 <commit>
을 변경, 사용자의 시점이 이동한다고 볼 수 있음, 어느 파일도 삭제X, $git log --all
로 확인이 가능
$git reset --hard <commit>
도 복구가 가능함main.py
: main.py 파일을 무시함*.py
: 확장자가 py인 파일을 무시함/*.py
: 현재 디렉토리 중에서 확장자가 py 파일을 무시함!main.py
: main.py를 무시하지 않음/dir
: 현재 디렉토리에 있는 dir 폴더에 있는 파일들을 무시함dir/
: 전체에서 모든 dir 폴더명에 있는 파일들을 무시함dir/*.py
: dir 폴더에 있는 확장자 py 파일을 무시함dir/*.{png, jpg}
: dir 폴더에 있는 png, jpg 파일을 무시함$git rebase <commit>
$ git stash
or $ git stash save
: 작업 디렉토리에서 수정한 파일들을 저장$git stash pop
: stash 목록에서 가장 최근 항목으로 되돌리고 stash 목록에서 삭제$ git stash apply <stash 이름>
+ $ git stash drop <stash 이름>
과 유사$ git stash list
: stash한 여러 목록들을 확인$git remote -v
: 현재 연결된 원격 저장소를 보여줌, 안 나오면 연결된 원격 저장소가 없는 것
$git remote add origin <경로>
: "경로"를 원격 저장소 경로로 설정
$git push origin master
: origin = 원격저장소(remote)의 주소, master = 현재의 브랜치, $git push --set-upstream origin master
를 1번 옵션으로 넣어주면 그 이후에는 $git push
만 입력이 가능하다
여러 개의 원격 저장소 활용이 가능하다.
git의 저장소를 다른 컴퓨터에 저장함
1. ssh를 통하여 원격 저장소에 접속함
2. 원하는 디렉토리에 git 원격 저장소를 생성함 ($git init --bare
)
3. 원격 컴퓨터의 ip 주소와 git 원격 저장소의 절대경로 확인
4. 로컬 컴퓨터에서 원격 컴퓨터를 연결함 ($ git remote add origin ssh://<계정>@<IP 주소>/<절대경로>/
5. $ git push --set-upstream origin master
6. 원격 컴퓨터에서 $git log --oneline
로 확인함
로컬 컴퓨터에서 git 프로젝트를 clone 해보자
$ git clone <github 레포지토리 주소> <디렉토리 이름>
디렉토리 이름은 생략 가능
main.py 파일을 작성하고 push하는 과정
$ echo “hello world!” >> main.py
$ git add main.py
$ git commit -m “add main.py file”
$ git push origin master
$ ssh-keygen
입력$ ls -al /home/<계정>/.ssh/
본인의 계정명에 맞게 입력하고 id_rsa(private key) , id_rsa.pub(public key)이 생성됐는지 확인 커밋을 여러 번 후에 push해도 모든 커밋이 반영된다
$git swtich -c <branch name>
: 브랜치를 생성하면서 변경 $ git checkout -b <branch name>
와 동일함$ git restore .
$ git restore <특정 파일 이름>
$ git restore --staged <스테이지에 있는 파일 이름>
다른 브랜치에 있는 특정한 커밋을 가져옴 $ git cherry-pick <commit hash>
관리자의 활동
• $ git clone <레포지토리 주소> <디렉토리 이름>
• $ git checkout -b develop
• $ echo “main” > main.py
$ echo “data loader” > data_loader.py
$ echo “model” > model.py
• $ git add main.py data_loader.py model.py
• $ git commit -m “first baseline version”
• $ git push origin develop
협업자의 활동
$ git clone -b develop <레포지토리 주소> <디렉토리 이름>
$ git branch
로 현재의 브랜치명을 확인
$ git checkout -b <새로운 브랜치명>
작업수행
$ git push origin <새로운 브랜치명>
관리자는 협업자가 push한 내용들을 pull하여 여러 branch를 생성함
$git pull origin <브랜치명>
이상이 없는지를 확인하고, 병합(merge) 작업을 수행함
원격 저장소의 더 이상 필요없는 브랜치는 삭제함 $git push origin --delete <삭제할 브랜치명>
Edit file : README 파일의 내용을 작성하는 곳
Preview : 작성된 README 파일을 미리보기 하는 곳
제목(Head) : 텍스트 앞에 # 1~6개 #과 텍스트 사이에는 공백 필요
텍스트 단락 줄 바꾸기 : Enter 두번 이상
가로줄 : -나 *을 3개 이상 입력할 경우 가로줄 삽입
목록 : 숫자 붙여서 작성하면 순서 목록, +,-,* 붙여서 작성하면 순서없는 목록
인용문 : 내용 줄 앞에 > 추가 하나가 아니라 여러 개 넣으면 인덴트된 인용문 추가
소스코드 : 한 줄은 ` 여러줄은 ``` 여러줄은 뒤에 특정 언어를 표시하면 그 언어로 표현이 됨
텍스트 강조 : *기울임체*
or _기울임체_
, **굵게**
or __굵게__
, ***굵은 기울임체***
or ___굵은 기울임체___
링크 : <링크 주소>
[링크 텍스트](링크 주소)
[링크 텍스트](링크 주소 "부가 설명")
이미지 : ![image](이미지 파일 경로)
, <img src="이미지 파일 경로" width="" height="">
, 로컬 저장소에 있는 이미지 파일을 드래그&드랍
테이블(표) : |제목|내용| |----|----|----|
-포킹한 주소 레포지토리 clone하고 커밋, 푸쉬 -> pull request를 만들면 포킹한 원 레포지토리 관리자가 변경 내용을 확인하고 Merge pull request를 할 수 있음
$git tag -a v.1.0.0 -m "first version"
) , $git show <tag명>
: tag 정보 상세 보기$git checkout <tag명>
: 해당 tag로 체크아웃이 가능함$git push origin master
: push 명령어 사용 시에 tag 정보는 전송에서 제외됨$git push origin <tag명> : 해당 tag를 원격 저장소에 push함
$ git push origin <원tag명>:<변경할tag명>