ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 알아두면 유용한 Git 용어/명령어 정리
    Git 2023. 11. 3. 22:26

    📖 Git 용어 모음

    📒 Git에서 파일들의 상태

    Git에서 파일들은 크게 다음 2가지 상태를 가진다.

    • Untracked 상태
    • Tracked 상태

     

    그리고 Tracked 상태는 다시 아래와 같은 3가지 상태로 나눌 수 있다.

    • Staged 상태
    • Unmodified 상태
    • Modified 상태

     

    1. Untracked 상태
    Untracked는 '추적되지 않고 있는'이라는 뜻이다. 이 상태는 파일이 Git에 의해서 그 변동사항이 전혀 추적되고 있지 않는 상태를 뜻한다. 예를 들어, 파일을 새로 생성하고 그 파일을 한 번도 git add 해주지 않았다면 이 상태이다.

     

    2. Tracked 상태
    파일이 Git에 의해 그 변동사항이 추적되고 있는 상태이다.

    • Staged 상태
      파일의 내용이 수정되고나서, staging area에 올라와있는 상태를 Staged(스테이징된, stage area에 올려진) 상태라고 한다.
    • Unmodified 상태
      현재 파일의 내용이 최신 커밋의 모습과 비교했을 때 전혀 바뀐 게 없는 상태면 그 파일은 Unmodified(수정되지 않은, 변한 게 없는) 상태이다. 커밋을 하고 난 직후에는 working directory 안의 모든 파일들이 이 상태가 된다.
    • Modified 상태
      최신 커밋의 모습과 비교했을 때 조금이라도 바뀐 내용이 있는 상태면 그 파일은 Modified(수정된) 상태이다.
      이렇게 Git에서 파일은 매 순간 4가지 상태 중 하나의 상태에 있게 된다.

     

     

    📒 HEAD와 reset

    HEAD는 어떤 commit 하나를 가리킨다.

    HEAD가 가리키는 커밋에 따라 working directory가 구성된다.

    git reset --hard를 통해 HEAD가 과거의 커밋을 가리키게 할 수 있다.

    --> working directory의 내용도 과거 커밋의 모습으로 돌아가게 한다.

     

     

    추가로 git reset을 한다고 해서 그 이후의 커밋이 사라지는 건 아니다.

    아래 그림처럼 HEAD가 3번째 커밋인 9033... 커밋을 가리키고 있는 상태에서

    $ git reset 43kf

     

    해당 명령어를 실행하면 master 브랜치가 다시 43kf.. 커밋을 가리키게 된다.

     

     

    git reset에 관해서 알아둘점
    1. 과거의 커밋으로 git reset을 한다고 그 이후의 커밋들이 삭제되는 게 아니라 계속 남아있다.
    2. git reset은 과거의 커밋뿐만 아니라 현재 HEAD가 가리키는 커밋 이후의 커밋으로도 할 수 있다.

     

     

    📒git fetch

    로컬 레포지토리에서 현재 HEAD가 가리키는 브랜치의 업스트림(upstream) 브랜치로부터 최신 커밋들을 가져온다.

    (가져오기만 한다는 점에서, 가져와서 머지하는 git pull과는 차이가 있다.)

     

     

     

     

     

    📖 Git 명령어 모음

    📒 Git Bash에서 commit log 확인하기

    $ git log

    위와 같이 명령어를 입력하면, 

    commit id와, Author, Date, commit 내용이 포함된 그동안 진행한 커밋들을 볼 수 있다.

     

    그러나 내용이 많아 복잡하기 때문에 커밋 히스토리를 깔끔하게 보기 위해서는 아래와 같은 명령어를 입력하면 된다.

    $ git log --pretty=oneline

    위 사진처럼 커밋 하나의 정보가 딱 한줄에 보이는 것을 확인할 수 있다.

    (앞에 노란색은 해시값으로 이루어진 commit id)

     

     

    📒 Git Bash에서 최신 commit 수정하기

    방금 했던 커밋에 대해 생각해보니 뭔가 후회가 남을 때! 다시 고치고 싶다면?!

     

    기존 코드를 수정한 후, git add 명령어로 staging area로 올리고 나서 아래 명령어를 통해 최신 commit을 수정한다.

    $ git commit --amend

     

    위 명령어를 작성하면, vi로 이동 되면서 가장 최근에 작성했던 commit 내용이 나오게 된다.

    해당 commit 내용을 수정하고 :wq로 나오면 최신 commit 수정 끝!

    참고로 git log --pretty=oneline 명령어를 입력하면

    기존 최신 commit의 수정됨에 따라,  해시 값이 변경된 것을 확인할 수 있다.

     

     

    📒 Git Bash에서 두 commit 간의 차이를 비교하기

    $ git diff [커밋 A의 아이디] [커밋 B의 아이디]

     

    만약 커밋 A의 아이디가 54b5072e03d860a0650f6b74f29ed53f2adbe56f이고

    커밋 B의 아이디가 caf56c9342ae6877cab749ad6e221d0364fec14e이라면

    git diff 54b5 caf5로 작성하면 된다.

     

     

    📒 Git Bash에서 이전 commit으로 git reset하기

    $ git reset --hard [돌아갈 커밋 아이디]

     

    이렇게 하면 HEAD의 위치가 돌아가고자 하는 commit을 가리키게 되고,

    그에 맞는 working directory의 내용도 해당 commit의 내용으로 바뀐다.

     

     

    📒 HEAD 관련 명령어

    현재 HEAD가 가리키는 commit의 바로 직전 commit으로 reset 하고 싶을 때

    $ git reset HEAD^

     

    현재 HEAD가 가리키는 commit에서 4단계 전의 commit으로 reset 하고 싶을 때

    $ git reset HEAD~4

     

     

    📒Git Bash에서 conflict 발생 시, merge 자체를 취소하기

    아래 사진 처럼 conflict가 발생했을 때, conflict가 발생한 빨간 박스 부분을 다 삭제하고
    merge의 결과로 원하는 모습대로 코드를 수정한 다음(divide_new 함수 추가)
    commit을 함으로써 문제를 해결해도 되지만,

    merge를 시도하기 이전의 상태로 돌아가고 싶다면 그냥 머지 자체를 취소하는 방법도 있다.

    $ git merge --abort

     

    이후, conflict가 났었던 파일을 열어보면 원래 모습 그대로 즉, 머지를 시도하기 이전 모습으로 돌아온 것을 확인할 수 있다.

     

     

    📒원격 저장소의 특정 브랜치만 git clone 해오기

    일반적으로 git clone을 하는 경우 default branch인 main이 바로 clone이 되므로,

    특정 브랜치를 clone 해오려면 아래와 같은 명령어를 작성해주면 된다.

    $ git clone -b <branch명> <remote_repo주소>

     

     

    📒git stash 관련

    1. 작업 내용 저장

    $ git stash

     

    2. 작업 내용 조회(=스택 살펴보기)

    $ git stash list

     

    3. 작업 내용 적용

    $ git stash apply [작업 내용의 아이디]
    • 작업 내용의 아이디를 생략하면 가장 최근의 작업 내용이 적용됨

     

    4. 작업 내용 제거

    $ git stash drop [작업 내용의 아이디]
    • 작업 내용의 아이디를 생략하면 가장 최근의 작업 내용이 제거됨

    작업 내용을 적용하면서 동시에 스택에서 제거도 해주는 커맨드 pop

    $ git stash pop [작업 내용의 아이디]

     

    git stash pop 커맨드는

    [작업 내용의 아이디]를 인자로 주면, 특정 작업 내용을 적용하면서 스택에서 제거하고,
    [작업 내용의 아이디]를 인자로 주지 않으면, 가장 최근에 한 작업 내용을 적용하면서 스택에서 제거한다.

     

    스택에 저장된 작업 내용을 working directory에 적용할 때

    • 그 작업 내용을 나중에 또 쓸 필요가 있다면 git stash apply를
    • 나중에 또 쓸 필요가 없다면 git stash pop을 쓰면 된다.

    'Git' 카테고리의 다른 글

    git log에 최신 커밋이 안 보일 때 복원하기  (0) 2024.01.04
Designed by Tistory.