* 터미널, 콘솔창, 깃 Bash 등 Command Line 으로 사용할 경우 입니다.


[기본 개념 및 용어]

1. Git은 파일을 Commited, Modified, Staged 세가지 상태로 관리한다. 

 - modified : 수정한 파일을 아직 로컬 저장소에 commit하지 않은 것을 의미함

 - staged : 현재 수정한 파일을 곧 Commit할 것이라고 표시한 상태를 의미함.

 - commited : 데이터가 로컬 저장소에 안전하게 저장됐다는 것을 의미함

2. Git은 Git Directory, Working Directory, Staging Area 세가지 영역으로 분리된다. 

 - Git Directory : Git이 프로젝트의 메타데이터와 객체 데이터베이스를 저장하는 곳을 말한다.  (.git)

 - Working Directory : 수정할 파일들이 있는 디렉토리

 - Staging Area : Git Directory에 있으며, 단순한 파일이고 곧 commit할 파일에 대한 정보를 저장한다. 

 (* Repository : commit 된 파일들이 실제 반영되는 저장소)


3. Working Directory의 모든 파일은 Tracked와 Untracked로 나뉜다. 

 - Tracked 파일은 이미 Snapshot에 포함돼 있던 파일이며, Unmodified, Modified, Staged 상태중 하나의 상태를 갖는다. 

 - Tracked 파일이 아닌 모든 파일은 Untracked 파일이다.

 


[명령어]

1. 새로운 Git 저장소 생성 (로컬)

git init


2. 현재 git 상태 보기

git status


2-1. 서버 Repository 에서 로컬 Repository 로 복제 (현재 위치에)

git clone 아이디:비밀번호@서버URL:경로


2-2. 로컬 Repository 를 로컬 Repository 에 복제 (현재 위치에)

git clone 원본 로컬 저장소 경로

ex) git clone /home/git/project/sample1


3. 로컬 Working Directory -> 로컬 Staging Area 에 추가

git add 파일명        // 파일 단위로 올리는 방법

git add .                // 변경된 전체 파일을 올리는 방법


4-1. 로컬 Staging Area -> 로컬 Repository 에 반영 (commit 시 message 가 꼭 필요하다.)

git commit -m "메모"

(* 현재 branch 의 Staging Area 에 있는 모든 파일들이 commit 된다.)


4-2. 로컬 Working Directory -> 로컬 Repository 에 반영 (Staring 단계 건너뜀.)

git commit -a -m "메모"

(* 현재 branch 의 Working Directory 에 있는 모든 수정된 파일들이 바로 commit 된다.)




------------------------------------------------------------


git add [Directory|파일 경로] //Untracked 파일을 Tracked 파일로 변경하거나, Tracked&수정된 파일을 staging 한다.

git status  //현재 상태 보기 



git commit -m "commit message"  //로컬 저장소에 commit(저장)

git commit -a -m "commit message"  // staging area 생략 commit (git add 과정 생략)

git commit --amend //수정한 내용이 없으면 커밋 메세지만 변경하고 수정한 내용이 있으면 이전 커밋으로 수정내용을 포함하여 새로운 커밋으로 덮어쓴다.


git rebase -i HEAD~2 // HEAD으로 부터 2개의(HEAD 포함) commit을 합친다.


git rm <filename>  // 파일을 삭제한 후 staged 상태로 만든다. (work directory의 파일도 삭제됨)

git rm --cached <filename> // 해당 파일을 untracked 상태로 변경한다. (work directory의 파일은 그대로 있는다. ignore를 빼먹은 경우 사용)


git mv <origin_file> <target_file> // 히스토리를 유지한 상태로 파일이름을 변경하고, 해당 변경사항이 staged 상태가 된다. 

     ==> "mv <origin_file> <target_file>; git rm <origin_file>; git add <target_file>" 과 동일하다.


git log [-p] -5  [--pretty=online|short|full|fuller]  //commit 로그를 확인한다.(최근 5개의 로그 확인) (-p 옵션은 각 커밋의 diff 결과를 보여준다.)

git log --pretty=format:"%h %s" --graph // 브랜치/머지 히스토리를 아스키 그래프로 보여준다.

git log --stat // 히스토리 통계를 보여준다.


git checkout <commit_id> // 특정 커밋시점으로 되돌린다. 

git checkout <branch명>  //지정된 브랜치가 가리키는 커밋을 HEAD가 가리키게 한다. (작업 디렉토리의 파일은 그대로 유지됨)

git checkout -b <branch명> //새로운 브랜치를 만들고  해당 브랜치를 checkout 한다.

git checkout -b <new branch name> <server branch name> // 서버에서 생성되어 있는 브랜치 가져오기

git checkout  <commit_id> -- <file> // 특정 커밋시점의 특정 파일만 되돌린다.

git checkout -- <file>  // work directory의 변경된 unstaged 파일을 최신 커밋된 내용으로 덮어쓴다. (작업중이던 내용이 있으면 날라가며, 복구 불가!!!)

git checkout -f // 현재 HEAD가 가리키는 커밋으로 작업 디렉토리의 파일을 되돌려 놓는다. (작업중이던 내용이 있으면 날라가며, 복구 불가!!!)

git checkout -f <branch>//  branch가 가리키는 커밋으로 작업 디렉토리의 파일을 되돌려 놓는다. (작업중이던 내용이 있으면 날라가며, 복구 불가!!!)


git reset HEAD <staged_file> // staged file을 unstaged로 변경한다.

git reset HEAD^    // 최종 커밋을 취소. 워킹트리는 보존됨. (커밋은 했으나 push하지 않은 경우 유용)

git reset HEAD~2     //마지막 2개의 커밋을 취소. 워킹트리는 보존됨.

git reset --hard HEAD~2    // 마지막 2개의 커밋을 취소. index 및 워킹트리 모두 원복됨.

git reset --hard ORIG_HEAD    // 머지한 것을 이미 커밋했을 때,  그 커밋을 취소. (잘못된 머지를 이미 커밋한 경우 유용)


git revert HEAD    // HEAD에서 변경한 내역을 취소하는 새로운 커밋 발행(undo commit). (커밋을 이미 push 해버린 경우 유용)


git diff  // work directory와 staged 영역 비교

git diff --cached // staged 영역과 & 저장소 commit 간의 비교 ("git diff --staged" 명령과 동일)


git branch <branch명> //새로운 branch를 만든다. 

git branch [-a]  //branch 목록을 조회한다.

git branch -m [old_branch] [new_branch]

git branch -d <branch명> //브랜치 삭제


git tag [-l] [v.1.4.*]   //Tag 목록조회 [v1.4 버전들의 목록만 조회]

git tag -a <tag명> -m '[tag message]'  //주석 태그 추가   ex>git tag -a v1.0 -m 'add first release tag'

git tag -s <tag명> -m '[tag message]' //서명된주석 태그 추가

git tag <tag명>  //경량 버전 태그 추가 

git tag -a <tag명> [commit hash]  // 특정 commit의 태그 추가

git show <tag명>  // 태그정보와 해당 태그의 commit 정보를 확인한다. 


git remote [-v] // 원격 저장소 정보 확인

git remote show <remote명> //리모트 저장소 살펴보기 

git remote add <remote명> <원격저장소URL> //원격 저장소를 추가한다.


git remote rename <old_name> <new_name> //remote repository 이름 변경

git remote rm <remote-name>  //remote repository 삭제 

git fetch [remote명]  //Remote Repository의 최신 변경사항을 Local Respository로 가져옮


git pull [remote명] [branch명]   //remote 저장소 브랜치에서 데이터를 가져와 자동으로 로컬 브랜치와 머지함

git push [remote명] [branch명] //local branch의 내용을 remote 저장소에 push 한다. 

git push [remote명] [tag명]  //local에 생성한 tag를 remote 에 추가한다.

git push [remote명] --tags  //local에 존재하는 tag중에 remote에 존재하지 않는 모든 태그들을 push 한다.  

git push <remote명> <local branch>:<remote branch> // 내가 최초로 서버에 브랜치 만들기

git push [remote명] :[branch명]  // remote에 있는 branch 를 삭제한다. (git push [remote명] --delete [branch명])


git merge <from_branch> <to_branch> // from branch를 to branch와 머지한다.


git mergetool // merge할 툴을 실행시켜 준다.


git submodule add <Git Repository URL> <Directory Path>  // Git Submodule 추가

git submodule init  // Git Submodule 초기화 [init -> update]

git submodule update // Git Submodule 소스 코드 받아오기 [init -> update]


git hash-object -w <filename> // 파일을 Git에 저장하고 해쉬코드를 출력한다.


git cat-file -p <hashcode> // 해쉬코드에 해당하는 개체의 내용을 출력한다.

git cat-file -t <hashcode> // 해쉬코드에 해당하는 개체의 타입을 출력한다.

git cat-file -p master^{tree} // master 브랜치가 가리키는 Tree 개체의 내용을 출력한다.


'Programming > GIT' 카테고리의 다른 글

[GitLab] SourceTree 연결 (win 10)  (0) 2018.05.07

+ Recent posts