Remarks
{NAME} 와 같은 형식으로 되어 있는 부분은 각자 customize 해야할 부분이다.
origin
역시 바뀔 수 있는 remote repo 이름이지만 편의상 고정함.
1. Github 가입 후 repository 생성
2. Git 다운로드
3. User 설정
$ git config --global user.name "{NAME}" # NAME 제한 없음
$ git config --global user.email "{EMAIL}" # Github 가입 email
$ git config --list # user.name, user.email 확인
4. Remote repository 연동
4.1 기존 파일들이 없는 경우
$ git clone {REPO-URL} # REPO-URL은 .git으로 끝남
ex) $ git clone https://github.com/alchemine/git-exercise.git
4.2 기존 파일들이 있는 경우
$ cd {PROJECT-DIRECTORY}
$ git init
$ git branch -M main # rename: current branch -> main (remote branch name)
$ git remote add origin {REPO-URL} # "origin" 이라는 이름으로 remote(github) repository 정보를 저장
$ git remote -v # 연동된 remote repo 확인
5. Commit, Push
$ git add . # current working directory에 포함된 모든 파일(디렉토리)들을 remote repo에 올리기로 설정 (unstage -> stage)
$ git status # 수정 사항 확인 (staged)
$ git commit -m "First commit"
$ git push -u origin main
# -u option을 통해 이후 remote repo, branch를 생략할 수 있음
# $ git push
# $ git pull
이후 위와 거의 유사한 수행을 다음의 명령어를 통해 수행할 수 있음
참고: git add . vs git commit -a
$ git commit -a -m "First commit"
$ git push
6. Pull
$ git pull origin main
7. Log
Git history를 확인할 수 있음
git log --oneline --graph
를 자주 쓰기 때문에 gitlog
와 같이 alias 지정을 해두면 편하다
$ git log
$ git log --oneline --graph
8. Revert, Reset
$ git log --oneline --graph
* cb473e3 (HEAD -> master, origin/master) Commit 2
* 0f92b64 Commit 1
위와 같은 상황에서 Commit 2를 없던 것으로 하고 싶은 경우 사용할 수 있는 방법이 revert
, reset
이다.
8.1 Revert: 되돌아간 기록을 남김
$ git revert cb473e3
$ git log --oneline --graph
* dc47cb4 (HEAD -> master) Revert "Commit 2"
* cb473e3 (origin/master) Commit 2
* 0f92b64 Commit 1
$ git push
8.2 Reset: 되돌아간 기록을 제거
$ git reset --hard 0f92b64
$ git log --oneline --graph
* 0f92b64 (HEAD -> master) Commit 1
$ git push -f # force(-f) option이 필요
단, push -f
를 수행하기 전 누군가 pull
하여 되돌리고 싶은 commit을 가지고 있다면 그 사람이 push
하게 되는 경우 다시 remote repo에 되돌리고 싶은 기록이 나타난다.
9. Branch
$ git branch # list local branches
$ git branch -r # list remote branches
$ git branch -a # list local, remote branches
$ git branch {BRANCH-NAME} # Generate new branch
$ git checkout -b {BRANCH-NAME} # Generate new branch & checkout
$ git checkout -t origin/{BRANCH-NAME} # Get branch from remote repo & checkout
$ git branch -M {BRANCH-NAME} # Force Rename
$ git branch -D {BRANCH-NAME} # Force Delete
10. Checkout
$ git checkout {BRANCH-NAME} # Change working branch
$ git checkout -b {COMMIT-ID} # Generate new branch with {COMMIT-HASH} & checkout
$ git checkout {TAG-NAME} # Checkout to the commit with the tag
11. Tag
$ git tag # List all tags
$ git tag {TAG-NAME} # Tag to the current commit
$ git tag {TAG-NAME} {COMMIT-ID} # Tag to the target commit
$ git push origin {TAG-NAME} # Push the tag to the remote repo
$ git push --tags # Push all tags to the remote repo
$ git tag -d {TAG-NAME} # Delete the tag in local repo
$ git push origin :tags/{TAG-NAME} # Delete the tag in remote repo
$ git checkout {TAG-NAME} # Checkout to the commit with the tag
PREVIOUSEtc