Git WorkFlow(파일의 status 관리)

msung99·2022년 2월 27일
0
post-thumbnail

지난번에 Git의 영역들 (Working Tree, Staging Area, Local/Remote Repository) 에 대해 알아봤습니다. 이번에는 이들을 어떻게 활용하는지, 또 이와 관련한 명령어들은 어떤것들이 있는지에 대해 알아봅시다.

지난번 포스팅이 궁금하시다면,
https://velog.io/@msung99/git-add 를 참고하시면 되겠습니다.

또한 지난번 포스팅 내용으로 충분히 이해할 수 있다고 느끼는 부분들은 생략 또는 간단히 설명하는 방식으로 진행하겠습니다.


파일의 status

예를들어 cal.py 라는 파일을 작업했다고 가정해봅시다.

1. Working Directory

1-1. Working directory 에서 Staging Area 로 파일 옮기기

git add cal.py
git add .

  • git add cal.py : Working Directory 에서 cal.py 파일을 작업한 내용을 Staging area 에 올린다.
  • git add . : 작업 및 변경한 모든 파일에 대해 Staging Area 에 올린다.

1-2. Staging Area 에서 Working Directory 로 파일 옮기기 (역과정)

git restore cal.py
git checkout cal.py

위에서 git add 를 통해 Staging Area 에 올렸다면, 반대로 Staging Area 에 올린 내용을 다시 Working Area 로 복귀시킬 수 있습니다.

  • git restore cal.py
  • git checkout cal.py

2. Staging Area

staging area 에 존재하는 파일도 옮겨다닐 수가 있습니다.

staging area 에서 버전 생성을 위해 local repository 로 이동할 수도 있으며, 반대로 staging area 에 있던 내용들을 다시 working directory 로 복귀시킬 수도 있습니다.

1-1. staging area 에서 local repository 로 이동시켜서 Version 생성하기

git commit -m "커밋메시지"

staging area 에 있는 내용들을 local repository 로 이동시킴으로써 새로운 커밋(commit) 을 만들 수 있습니다. 커밋이란 곧 새로운 버전(version) 을 의미합니다.

1-2. git add 를 통해 stage area 에 올라가있는 파일을 unstaged 상태로 변경하기

1) git restore --staged cal.py
2) git reset cal.py
3) git reset HEAD (모든 staged 파일을 unstaged 로 바꾼다)

unstaged status 로 변경시킨다는 것은, working directory 로 복귀시킨다는 것을 의미합니다.

만일 본인이 원하지 않던 파일까지 실수로 stage area 로 올린경우, 다시 working directory 로 복귀시키기 위해 위 명령어들을 사용하면 좋겠죠~?

  • 여기서 HEAD 라는 것은 HEAD 포인터라는 것인데, HEAD 포인터와 관련한 이론은 "브렌치 & merge" 에 관한 다음 포스팅에서 자세히 설명하도록 하겠습니다.

3. local repository

커밋메시지를 통해 비로소 생성된 새로운 commit 은 히스토리의 한 부분을 차지하게 됩니다.

우리는 로컬 레포지토리 상에서 원하는 커밋 히스토리로 되돌아가는 것도 가능할 만큼 git 을 사용하면 코드 관리가 아주 편리해지게 되었습니다!

3-1. Remote Repository(원격 레포지토리) 에 push 하기

git remote add origin "원격 레포지토리 주소"
git push origin main (main 브렌치에 push)

원하는 원격 레포지토리에 로컬 레포지토리 상에 존재하는 커밋 내역을 올려두고 싶은경우, 당연히 원격 레포지토리의 주소를 알아야 커밋을 올릴 수 있겠죠~?

따라서 원격 레포지토리에 push 하기전에 주소를 등록해야 합니다.
그러고 나서 원격 레포지토리의 main 브렌치에 push 가 비로소 가능해집니다!

  • 여기서 브렌치(branch) 의 개념을 모르시겠다면, 아래의 제 포스팅을 참고하셔도 좋을듯합니다.

3-2. 예전 커밋 버전으로 되돌아가기

git reset --hard 해시코드값
git reset HEAD^
git revert 해시코드값

  • git reset --hard 해시코드값 : 가장 최신 커밋부터 시작해서 해당 커밋에 도달할때 까지의 모든 커밋들을 삭제하면서 되돌아갑니다.

(ex. version5 커밋에서 git reset --hard version2 를 하면 version5, version4, version3 을 삭제시키고 version2 로 돌아간다.)

  • git reset HEAD^ : 가장 최근 커밋을 삭제시키고 바로 직전의 커밋으로 되돌아감

  • git revert 해시코드값 : 커밋을 삭제시키는 것이 아닌, 예전 버전의 커밋에 대해 새로운 복사본 커밋을 생성하면서 커밋을 되돌아가는 느낌으로 복귀한다.

(revert 개념은 아래 블로깅 내용을 참고하시면 좋을듯합니다. 처음 git 을 접하시는 분들은 내용을 이해하기 다소 어려울 수 있습니다.)

https://velog.io/@janeljs/git-4


status 관리에 필요한 추가 필수 명령어

아래 명령어들은 절대 모르시면 정말 중요한 명령어들이니, 꼭 기억해두시면 좋을듯합니다!

  • git status : 현재 레포지토리 상에서 파일의 변화 상태를 보여줌(status 상태)
  • git log : 현 브렌치에 대한 커밋 히스토리를 보여줌
  • git diff : 파일의 어떤 내용이 변경되었는지 차이점을 비교할 수 있다.

git status 예시

git log 예시

profile
https://haon.blog

0개의 댓글