Tool/Git

깃(Git) 문법 - 생성, 푸시, 풀, 복구, 확인 등

재은초 2023. 8. 21. 15:52
반응형

0. 깃 작동 흐름

 

1. 로컬 저장소 생성하기

init

  • git을 사용하고 싶은 작업 폴더를 터미널로 열고 git init 명령어를 입력하면, 해당 디렉토리 안에 '.git' 폴더를 만들고 git이 실행된다.
git init                                     // 저장소 생성

config

  • git config 명령으로 사용자 정보를 설정할 수 있으며, '.git' 폴더 내부의 config라는 파일을 열면 설정한 정보가 기록되어 있다.
  • --global 옵션을 사용하면 사용자 PC안의 모든 저장소에 동일한 설정 값이 반영된다.
git config user.name "User1"                  // 이름 설정
git config user.email "user@gmail.com"       // 이메일 설정

git config --global user.name "User1"                 // 전체 저장소 이름 설정
git config --global user.email "user@gmail.com"       // 전체 저장소 이메일 설정

git config --list                            // 설정 정보 출력
git config --get user.name                   // 일부 설정 항목만 출력
git help config                              // 커맨드 이름 도움말 보기

 

2. 원격 저장소에 올리기

add

  • 저장하고 싶은 파일을 Staging Area에 추가(Staging)한다.
git add 파일명                  // 하나의 파일 또는 디렉토리만 스테이징
git add 디렉토리명               // 하나의 파일 또는 디렉토리만 스테이징
git add 파일명1 파일명2           // 여러 파일을 동시에 스테이징
git add .                      // 수정사항있는 모든 파일을 스테이징

commit

  • 이력을 저장하는 명령어로 대기 공간에 있는 파일을 저장소(Repository)에 저장한다.
  • 커밋 메세지가 없으면 커밋되지 않으며, -m 옵션이 없으면 커밋 메세지 작성하는 vim이 열리는데 키보드 i 입력 후 메세지를 입력하면 된다.
git commit -m "메세지"         // -m 메세지 옵션
git commit sample.txt        // -m 없으면 커밋 메세지 작성하는 창 생성

git commit -a                // 수정 상태 파일 전체 add 및 commit
git commit -am "메시지"
git commit -a -m "메시지"

push

  • push 명령어는 로컬 저장소에서 원격 저장소로 업로드할 때 사용한다.
  • -u 옵션은 입력한 주소를 기억하라는 의미로, 다음부터는 주소 입력없이 git push만 입력해도 해당 주소로 업로드 된다.
  • 참고로 원격과 로컬 저장소의 내용이 다르면 로컬저장소에서 git push가 안되므로, 변동사항이 생겼다면 git pull 하고 나서 git push 해야 한다.
git push 원격저장소주소 로컬브랜치명     // 로컬 브랜치가 원격 저장소로 업로드

git push -u 원격저장소주소 로컬브랜치명  // -u 옵션 설정 후 인자 생략 가능
git push

remote

  • remote 명령어를 통해 긴 주소를 변수에 넣어서 간편하게 사용할 수 있으며, 변수목록을 보려면 git remote -v 를 입력하면 된다.
  • git clone을 이용하여 git을 시작한 경우 기본적으로 origin이라는 리모트 저장소를 갖고 있다.
git remote                 // 추가된 원격저장소 리스트 출력
git remote -v              // 원격저장소 리스트 출력

git remote add 저장소명 주소     // 해당 이름으로 원격 저장소 등록
git remote rm 저장소명          // 해당 원격 저장소를 등록 리스트에서 삭제

git push -u 저장소명 로컬브랜치명   // 로컬 브랜치가 원격 저장소 추적하도록 설정
                              // 그리고 파일들을 원격 저장소로 푸시

.gitignore

  • .gitignore 파일로 저장소에 올리지 않는 파일들을 지정할 수 있는데, 해당 파일 생성 후 에디터 내에서 Git의 추적을 받기를 원하지 않는 이름들을 적어주면 된다.
  • gitignore.io 사이트에서는 개발환경과 언어 등을 입력하면 .gitignore 스크립트를 자동으로 생성해준다.
touch .gitignore          // .gitignore 생성
notepad .gitignore

 

3. 원격 저장소에서 가져오기

pull

  • pull은 원격 저장소의 내용을 가져와 자동으로 로컬 저장소와 병합 작업을 실행하는데, fetch + merge와 같은 효과를 한다.
  • 충돌하는 변경이 없을 경우 자동으로 병합되지만, 충돌이 있을 경우에는 충돌난 부분을 수동으로 해결한 다음 직접 commit을 해야 한다.
git pull 원격저장소주소                // 원격저장소 가져옴
git pull 원격저장소주소 브랜치명         // 특정 브랜치만 가져옴

git pull                          // -u 옵션 설정 후 인자 생략 가능

clone

  • 원격저장소에 있던 내용을 그대로 내려받을 수 있다.
git clone 원격저장소주소
clone과 pull의 차이점
: clone은 해당 저장소를 통째로 다운 받는 개념으로 내 컴퓨터에 해당 프로젝트의 폴더를 새롭게 생성을 한다. 반면에 pull은 내가 참여하고 있는 프로젝트에서 변경 사항이 생긴 경우 내가 로컬로 작업하고 있는 프로젝트와의 병합을 위해서 수행한다.

fetch

  • fetch는 로컬 데이터와 병합은 하지 않고, 단순히 원격 저장소의 내용만 로컬 저장소로 가져온다.
  • fetch를 실행하면 원격 저장소의 최신 이력을 확인할 수 있습니다. 이 때 가져온 최신 커밋 이력은 이름 없는 브랜치로 로컬에 가져온다.
git fetch
fetch와 pull의 차이점
: fetch는 원격 저장소에 변경사항이 있는지 확인만 하고, 변경된 데이터를 로컬에 실제로 가져오지는 않습니다. 반면에 pull은 원격 저장소에서 변경된 정보를 확인할 뿐만 아니라 최신 데이터를 복사하여 로컬에 가져옵니다.

 

4. 커밋 내용 되돌리기

checkout

  • checkout 명령어로 과거의 파일 상태 및 이력으로 복귀할 수 있다.
git checkout 커밋값           // 해당 커밋으로 파일 상태 변경
git checkout -              // HEAD가 전에 참조했던 커밋으로 상태변경
git checkout master         // HEAD가 master를 참조
git checkout HEAD~n         // HEAD 기준 n단계 이전 커밋으로 상태변경

restore

  • restore 명령어로 파일을 이전 상태로 복구할 수 있다.
git restore 파일명                     // 파일 수정전으로 복구
git restore --source 커밋아이디 파일명    // 파일이 특정 커밋아이디때로 복구

git restore --staged 파일명            // 스테이징 취소

revert

  • revert 명령어로 특정 커밋에 있던 일을 삭제할 수 있다.
git revert HEAD               // 최근 커밋 1개만 삭제

git revert 커밋Id             // 해당 커밋을 되돌리기
git revert 커밋Id1..커밋밋Id2   // 커밋해쉬1 제외 해당 구간만큼 커밋 되돌리기

git revert --no-edit 커밋해쉬   // revert 커밋 메세지 수정하지 않고 기본 사용

reset

  • reset 명령어로 특정 커밋 시절로 되돌릴 수 있는데, 모드는 기본적으로 mixed가 지정되며 그 이외에도 soft와 hard 중에서 선택할 수도 있다.
  • 갑자기 소스코드가 사라지므로 여러명이서 협업하는 저장소에서는 보통 reset을 사용하지 않는다.
git reset                      // 스테이징 역역 파일 전체를 unstaged
git reset 파일명                 // 해당 파일을 unstaged (mixed 옵션)

git reset 커밋값                 // 해당 커밋으로 브랜치 참조 변경
git reset --soft 커밋값          // 커밋만 되돌리고 싶을 때
git reset --mixed 커밋값         // 변경한 인덱스 상태를 원래대로 되돌릴 때
git reset --hard 커밋값          // 최근 커밋 다 버리고 이전 상태로 돌아갈 때

git reset HEAD^                 // HEAD 기준으로 직전 커밋으로 리셋
git reset HEAD~숫자              // HEAD 기준으로 정수 값 단계 전 커밋으로
  • 실수로 reset 을 한 경우에는, 이전 커밋을 의미하는 ORIG_HEAD로 reset 하여 reset 실행 전의 상태로 되돌릴 수 있다.
git reset --hard ORIG_HEAD

rebase

  • rebase는 브랜치의 시작점(base)을 다른 커밋으로 옮겨준다.
  • 만약 rebase 한 후 원래대로 되돌리고자 하는 경우에는 이전 커밋을 의미하는 ORIG_HEAD를 실행하여 rebase 전의 상태로 되돌릴 수 있다.
git rebase 브랜치명         // 현재 브랜치가 브랜치명부터 분기하도록 재배치
git rebase --continue     // 커밋 대신 충돌 수정 후 재배치 진행
git rebase --abort        // rebase 취소

 

5. 커밋 내용 변경 및 삭제하기

--amend

  • amend 옵션을 지정하여 커밋을 수행하면, 같은 브랜치 상에서 이전에 커밋했던 내용에 새로운 내용을 추가하거나 설명을 수정할 수 있다.
git commit --amend                        // 최근 커밋 수정
git commit --amend -m "변경할 메시지"        // 직전 커밋 메시지 변경

git add 누락된파일명                         // 누락된 파일을 새로 추가
git commit --amend

git add 업데이트된파일명                      // 기존 파일 업데이트
git commit --amend

rm

  • rm으로 파일을 삭제할 수 있으며, 파일 삭제 후 커밋을 해야한다.
git rm 파일명               // 로컬 저장소와 git 저장소 모두에서 삭제
git rm --cached 파일명      // 로컬 디렉토리는 유지 git에서만 삭제
git rm -r 디렉토리명         // 디렉토리 삭제

git commit

 

6. 커밋 상태 확인하기

status

  • git이 인식하고 있는 상태 정보를 출력한다.
git status
git status -u                      // untracked 파일 전체를 확인
git status -s                      // 파일 상태 정보 간략히 표시

log

  • 저장소의 커밋 기록을 한 눈에 보고 싶을 때 사용한다.
git log
git log --all --oneline                  // 한 줄 형태로 출력
git log --all --graph                    // 그래프 형태로 출력

show

  • HEAD는 현재 위치를 말한다.
git show                   // 가장 최근 커밋 정보 출력
git show 커밋값              // 해당 커밋 정보 출력
git show HEAD              // HEAD가 참조하는 커밋 정보 출력
git show HEAD^^^           // HEAD 기준 3단계 이전 커밋 정보 출력
git show HEAD~[n]          // HEAD 기준 n단계 이전 커밋 정보 출력

diff/difftool

  • diff 명령어로 각 커밋의 변경된 부분을 알려주며, difftool 을 활용하면 조금 더 시각적으로 효율적으로 보여준다.
  • Vim 에디터가 뜨면 키보드 HJKL키로 이동하고 :q나 :qa를 입력해 나간다.
git diff                        // 현재 파일과 최근 커밋의 차이점
git diff 커밋ID                  // 현재 파일과 특정 커밋과의 차이점
git diff --staged               // 최근 커밋과 스테이징 파일간의 차이점
git diff 커밋ID1 커밋ID2          // 특정 커밋 1과 2의 차이점

git difftool                    // 현재 파일과 최근 커밋의 차이점
git diff 커밋ID                  // 현재 파일과 특정 커밋과의 차이점
git diff 커밋ID1 커밋ID2          // 특정 커밋 1과 2의 차이점

tag

  • 특정 커밋에 꼬리표(tag)를 달아 별도로 저장하는 기능으로, 보통 특정 버전을 출시할 때 사용한다. (ex. v1.0 등등)
  • git push 할 때 태그는 원격 저장소에 자동으로 전송되지 않으므로 별도로 push  해야한다.
git tag                           // 로컬 저장소의 모든 태그 조회
git tag -l "태그명"                 // 태그명으로 검색
git show 태그명                     // 해당 태그가 부착된 커밋 상세정보

git tag 태그명                      // 현재 커밋에 태그 생성
git tag 태그명 커밋ID                // 해당 커밋에 태그 생성
git tag -a 태그명 –m “메세지” 커밋ID   // 메시지 추가하여 태그 생성
git tag -am 태그명 “메세지”           // 현재 커밋에 메시지 추가해 태그 생성

git push 브랜치명 --tags             // 생성된 전체 태그 원격 저장소로 푸시
git push 브랜치염 태그명               // 해당 태그를 원격 저장소에 푸시
git tag –d 태그명                    // 해당 태그 삭제
git push –d 태그명                   // 원격 저장소의 해당 태그 삭제

 

Reference

반응형