달나라 노트

3. add, commit 본문

Github

3. add, commit

CosmosProject 2021. 1. 15. 21:10
728x90
반응형

 

 

 

add, commit

지난번에 f1.txt라는 파일을 만들었었죠.
그런데 문제는 GIT에선 자동으로 파일의 수정을 트래킹하지 않습니다.
저희가 직접 어떤 파일을 트래킹할건지 명시한 후 해당 파일들의 수정 사항을 저장하라는 명령까지 해줘야 합니다.

git status

git status 명령어를 입력하면 위와 같은 창이 나옵니다.
보면 f1.txt 파일이 빨간색으로 표시되어있으며 Untracked file이라고 명시되어 있습니다.
따라서 내가 f1.txt라는 파일을 만들었지만 아직 이 파일의 version이 트래킹되고 있는 것은 아니라는 뜻입니다.
git에선 add라는 것이 있는데 이것은 간단히 말해 내가 수정한 사항을 version 트래킹하라는 명령입니다.
git status 명령어는 나의 파일들이 add된 상태인지 commit 전인지 후인지 등의 내용을 보여줍니다.

 


파일을 commit하기 전에 add와 commit에 대해 감을 잡아봅시다.
git에서는 어떤 파일의 version tracking을 위해선 두 단계가 존재합니다. 바로 add와 commit입니다.
stage(commit되어야 할 파일들이 올라가는 곳)라는 곳에 version tracking을 할 파일들을 올려놓고 (= add)

stage에 올라온 파일들을 commit하는 방식입니다. (= commit)

 


add 명령어는 어떤 파일을 stage에 올릴지 명시해주는 명령어입니다.
commit 명령어는 stage에 올라온 파일들을 commit한다는 명령어입니다.

 


굳이 바로 모든 파일을 commit하지 않고 commit 전에 파일들을 일일이 add하여 stage에 올려주는 작업이 필요한 이유가 무엇일까요?
우리가 개발을 하다보면 항상 모든 파일이 필수적인 파일은 아닐겁니다.
필수적인 메인 파일이 있는가하면 테스트를 한다던지 등의 임시 파일도 존재할겁니다.
그래서 git은 stage 단계를 도입하여 내가 수정한 많은 파일 중 원하는 파일들(add된 파일들)을 선택적으로 commit하도록 한 것입니다.

GIT은 stage와 repository라는 개념을 가지고 있습니다.
그리고 stage는 commit을 대기하는 파일들이 가는 곳이고, repository는 commit된 결과가 저장되는 곳입니다.

 

 

 

git add 파일명

아까 git status 명령어의 결과로 f1.txt 파일이 Untracked 상태였던 것 기억하시나요?
저는 이 f1.txt 파일을 commit시키려고 합니다.
그러나 이를 위해선 먼저 f1.txt파일을 stage에 올려놓는 작업이 필요합니다.
이를 위해선 git add 파일명 명령어를 사용할 수 있습니다.

add를 한 후 git status 명령어를 다시 실행시켜보면 이전과는 다르게 f1.txt파일이 Changes to be commited 목록에 있는 것을 알 수 있습니다.
이는 f1.txt 파일이 정상적으로 stage에 올라왔다는 것을 의미합니다.

 

만약 수많은 파일을 동시에 add해야한다면 어떻게 할까요?
일일이 모든 파일을 git add file_name의 형태로 add하기에는 너무 번거롭겠죠.
이런 상황을 위해 git add . 이라는 명령어가 있습니다.
이렇게 add 뒤에 마침표를 찍으면 현재 git project에 있는 모든 file을 자동으로 add하라는 뜻이 됩니다.


자 이제 commit을 해야하는데 commit을 하기 전에 한가지 단계를 거칩니다.
GIT은 여러 사람이 공동작업을 할 수 있기 때문에 누가 어떤 version을 commit했는지도 볼 수 있습니다.
이를 위해선 먼저 사용자 정보를 등록해놔야겠죠.

git config --global user.name 이름
git config --global user.email 이메일

 

1. 위 명령어를 통하여 이름과 이메일을 설정하였습니다.


2. git config --list 명령어를 사용하면 user.name과 user.email이 제대로 설정된 것을 확인할 수 있습니다.

 

 

 

 

 


사용자 정보를 등록했으니 이제 commit을 해봅시다.

git commit

1. commit을 하기 위해선 git commit 명령어를 입력합니다.


2. 그러면 아까 vim 명령어를 통해 진입했던 것과 비슷한 뭔가 적을 수 있는 창이 뜨는데 이 화면이 바로 commit message(commit 시에 이 commit에는 어떤 내용들이 달라졌는지 등을 명시해주는 message)를 적을 수 있는 창이 뜹니다.


3. commit message를 입력하기 위해선 i(insert) 키를 눌러 insert 모드로 변경시켜야 합니다.
그리고 나서 commit message를 입력합니다.
가장 위에 노란 글씨로 commit message 1으로 입력된 것이 보이시나요?


4. commit message를 모두 입력했다면 esc키를 눌러 입력 모드를 종료합니다.
입력 모드를 종료한 후 :wq를 입력해 수정한 commit message를 저장(w)하고 commit message 입력 창을 빠져나옵니다.(q)


5. commit이 완료되면 메인 콘솔 창으로 나오며 어떤 메세지가 뜹니다.

commit이 완료되었습니다.


6. commit이 정말 잘 완료되었는지 알아보기 위해서 git status 명령어를 실행시켜보면 이전과는 다르게 Untracked file이나 Changes to be commited file이 나오지 않고 nothing to commit이라고 나오며 commit할 내용이 없다고 출력됩니다.
commit이 정상적으로 이뤄진 겁니다.

 

 

 

 


 

 

 

 

 

add 취소하기

git add 명령어로 어떤 파일들을 stage에 올렸을 때 특정 파일을 stage에서 삭제하고 싶을 때가 있습니다.
해당 파일을 굳이 commit할 필요가 없다면 stage에서 삭제해야하겠죠.
이런 경우에는 다음과 같음 명령어를 사용하면 됩니다.

git reset HEAD file_name

위 명령어를 입력하면 file_name에 적힌 파일이 add된 상태였다가 add되지 않은 상태로 변경됩니다.
만약 file_name을 명시하지 않으면 add 상태였던 모든 file이 add되지 않은 상태로 변경됩니다.

 

 

 

 

 

 


 

 

 

 

 

commit 취소하기

commit을 하고 나서 commit을 취소해야 할 경우가 있습니다.
이럴 땐 다음 명령어를 사용하면 됩니다.

git reset --soft HEAD^
 가장 최근 commit을 취소하고 해당 파일들은 staged 상태로 워킹 디렉토리에 보존

git reset --mixed HEAD^
git reset HEAD^
 가장 최근 commit을 취소하고 해당 파일들은 unstaged 상태로 워킹 디렉토리에 보존

git reset HEAD~2  가장 최근 2개의 commit을 취소하고 해당 파일들은 unstaged 상태로 워킹 디렉토리에 보존.
 이건 조심해서 사용해야 하는 것이 2개의 commit을 건너뛰고 그만큼 github와 로컬 저장소간의 차이가 생기기 때문에 예상치 못한 error가 날 수 있음

git reset --hard HEAD^
 commit을 취소하고 해당 파일들은 unstaged 상태로 워킹 디렉터리에서 삭제



git reset 명령은 아래의 옵션과 관련해서 주의하여 사용해야 합니다.

reset 옵션
– soft : index 보존(add한 상태, staged 상태), 워킹 디렉터리의 파일 보존. 즉 모두 보존.
– mixed : index 취소(add하기 전 상태, unstaged 상태), 워킹 디렉터리의 파일 보존 (기본 옵션)
– hard : index 취소(add하기 전 상태, unstaged 상태), 워킹 디렉터리의 파일 삭제. 즉 모두 취소.

 

 

 

 

 


 

 

 

 

commit message 변경하기

git commit --amend

위 명령어를 입력하면 commit message를 입력하는 창이 나오는데 해당 창에서 commit message를 수정 가능합니다.

 

 

 

 

728x90
반응형

'Github' 카테고리의 다른 글

6. 버전 되돌리기 맛보기(reset, revert)  (0) 2021.01.15
5. 버전 관리  (0) 2021.01.15
4. 선택적 commit  (0) 2021.01.15
2. GIT의 시작  (0) 2021.01.15
1. GIT Installation  (0) 2021.01.15
Comments