본문 바로가기

문과 코린이의, [Git] 기록

[문과 코린이의 IT 기록장] Git 시간 다루기 (프로젝트의 변경사항들을 버전에 담기, commit하기, 변경사항들을 만들고 Commit하기, Git에서 과거 버전으로 돌아가는 방식, SourceTree로 진행해보기)

반응형

[문과 코린이의 IT 기록장] Git 시간 다루기 (프로젝트의 변경사항들을 버전에 담기, commit하기, 변경사항들을 만들고 Commit하기, Git에서 과거 버전으로 돌아가는 방식, SourceTree로 진행해보기)

[문과 코린이의 IT 기록장] Git 시간 다루기 (프로젝트의 변경사항들을 버전에 담기,  commit하기, 변경사항들을 만들고 Commit하기, Git에서 과거 버전으로 돌아가는 방식, SourceTree로 진행해보기)


[ 참고 영상 ]

 

 

제대로 파는 Git & GitHub - by 얄코 - 인프런 | 강의

코알못도 따라올 수 있는 친절하고 쉬운 강좌! 현업 개발자는 Git 박사로 들어주는 끝판왕 강좌!, - 강의 소개 | 인프런...

www.inflearn.com

2022.03.29 - [문과 코린이의, [Git] 기록] - [문과 코린이의 IT 기록장] Git Intro (Git을 배워야하는 이유, Git 설치 (윈도우), SourceTree, VS Code 설치, CLI vs GUI 무엇을 사용해야 하는가?, Git 최초설정, Git을 통한, 프로젝트 생성 & Git 관리 시작, Sou..

 

[문과 코린이의 IT 기록장] Git Intro (Git을 배워야하는 이유, Git 설치 (윈도우), SourceTree, VS Code 설치

[문과 코린이의 IT 기록장] Git Intro (Git을 배워야하는 이유,  Git 설치 (윈도우), SourceTree, VS Code 설치, CLI vs GUI 무엇을 사용해야 하는가?, Git 최초설정, Git을 통한, 프..

vansoft1215.tistory.com

 


1. 프로젝트의 변경사항들을 버전에 담기

1) 변경사항 확인

$git status

결과물

* No commits yet : 아직 commit이 없다. (commit = version)

* Untracked files : 아직 Git의 관리에 들어간 적 없는 파일


2) 파일 하나 담기

$git add 파일명

 * 변경사항은 $git status로 확인한다.

cf. 프로젝트에서 어떤 작업들을 했을 때, 이들을 한 버전에 모두 넣는 것이 아니라, 버전마다 다르게 넣고 싶을 경우가 존재할 수도 있음. 이 때 사용하는 것. (일반적으로는 모든 파일을 한번에 담는 경우가 많음)


3) 모든 파일 담기

$git add .

 * 변경사항은 $git status로 확인한다.

 

 


2. commit하기 = 새로운 버전으로 만들기

$git commit

이 명령어를 사용하면, Vi 입력 모드로 진입하게 된다.

- Vi입력 모드 작업 방법

작업 Vi 명령어 상세
입력 시작 i 명령어 입력 모드에서 텍스트 입력 모드로 전환
입력 종료 ESC 텍스트 입력 모드에서 명령어 입력 모드로 전환
저장 없이 종료 :q  
저장 없이 강제 종료 :q! 입력한 것이 있을 때 사용
저장하고 종료 :wq 입력한 것이 있을 때 사용
위로 스크롤 k git log 등에서 내역이 길 때 사용
아래로 스크롤 j git log 등에서 내역이 길 때 사용

a. i명령어를 사용해, commit 이름을 입력하기

b. ESC를 눌러 빠져나오기

c. :wq를 통해 저장(commit)하고 종료하기

d. git status를 사용해 제대로 commit 되었는지 확인하기

$git commit -m "FIRST COMMIT"
# 이러한 형태로도 git commit을 사용할 수 있음.

3. 변경사항들을 만들고 Commit하기

1) 변경사항 만들기

 * U : 새로 만들어진 파일

 * M : 수정된 파일


2) 변경사항 확인하기

삭제사항, 변경사항, 추가사항 확인하기

 * Untracked files : git이 관리해본적 없는 파일이 뜬다.


3) 변경사항 조금 더 구체적으로 확인하기

$git diff
작업 Vi 명령어 상세
위로 스크롤 k git log 등에서 내역이 길 때 사용
아래로 스크롤 j git log 등에서 내역이 길 때 사용
끄기 :q :가 입력되어 있으므로 q만 눌러도 됨

4) 이 모든 내용들을 commit하는 방법

$git add .
# 모든 것을 버전에 넣을 준비 (모든 것을 파일에 담기)
$git status
# git status로 확인하기
$git commit -m "Replace Lions with Leopards"
$git log
# 새로운 버전이 만들어진 것을 확인하기 (두 개의 버전이 존재하는 것을 확인하기)

git log 결과값
소스트리에서도 두 개의 버전이 나눠진 것을 확인 가능


5) add와 commit을 한 번에 하는 방법

$git commit -am "(메시지)"
# 이는 새로 추가된(untracked) 파일이 없을 때만 가능하다.

6) commit 메세지 변경하는 방법

a. 마지막 commit 메시지 수정하기

$git commit --amend -m "바꿀 메시지"

b. 이전 commit 메시지 수정하기

$git rebase -i HEAD~3 
# HEAD~3은 마지막부터 몇개의 커밋 메시지를 불러올 것인지를 결정하는 것

# 1) 이후 수정하고 싶은 Commit 내역의 pick을 reword로 바꾸기
# 2) :wq를 눌러 터미널을 종료하기
# 3) 메시지 변경 후 다시 :wq를 눌러 저장해 종료하기

 


4. Git에서 과거 버전으로 돌아가는 방식

a. reset : 원하는 시점으로 돌아간 뒤, 이후 내역들을 지운다. (시점을 아에 과거로 되돌리는 것)

b. revert : 되돌리기 원하는 시점의 커밋을 거꾸로 실행한다. (버전을 뒤로 돌아가는 내역을, 하나 더 추가한다는 것. 즉 내역을 그대로 유지함)


1) reset 사용방법

$git log 
# 아래 명령어로 커밋 내역 확인하기
# 되돌아갈 시점에 대한, 커밋 해시 복사 (전체 다 할 필요 X. 앞의 몇 개만 하면 됨)
$git reset --hard (돌아갈 커밋 해시)

상태가 (Add Geoge to Tigers)로 돌아감.


2) revert 사용방법

$git revert (되돌릴 커밋 해시)
# :wq로 커밋 메시지 저장 후, 확인해보면, 새로운 revert 버전이 하나 더 생김

FIRST COMMIT의 새로운 버전이 생긴 것을 확인 가능

 

* 만약 Second commit의 내용 중 한 부분이 수정되어 hard에 저장되었는데, Second commit으로 revert를 하게 되면?

=> 해당 수정 부분에 대한 충돌이 일어나면서 오류가 발생한다.

=> git add 또는 rm을 사용해줘야 함. (add를 사용해서, 해당 파일 내용을 담거나, 아님 rm으로 삭제를 해줘야함)

=> 이후 git revert --continue를 통해 지속해주기

 

[ 커밋하지 않고 revert 하기 ]

$git revert --no-commit (되돌릴  커밋 해시)
# 원하는 작업을 추가한 다음 함께 커밋한다.
# 파일을 add로 추가한 상태로만 만들어준다.
# 즉, revert하는 것 뿐만 아니라 다른 변화도 함께 묶어서 캡슐에 넣고 싶은 경우 사용한다.

 

[ 커밋되지 않은 것들을 모두 지우고, 마지막 commit의 상태로 돌아가고 싶을 때 ]

$git revert --hard

5. SourceTree로 진행해보기

1) commit 진행

a. 스테이지에 올리기

- add를 하는 과정과 같음

b. 커밋하기

- 커밋 버튼 누른 후, 메시지에 커밋명을 작성하면 완료

 


2) revert 진행

a. 커밋 되돌리기 클릭
b. 예 클릭

 

 


3) reset 진행

a. 이 커밋까지 현재 브랜치를 초기화 진행
b. 커밋 초기화 확인 누르기

 


* 유의사항
- 아직 공부하고 있는 문과생 코린이가, 정리해서 남겨놓은 정리 및 필기노트입니다.
- 정확하지 않거나, 틀린 점이 있을 수 있으니, 유의해서 봐주시면 감사하겠습니다.
- 혹시 잘못된 점을 발견하셨다면, 댓글로 친절하게 남겨주시면 감사하겠습니다 :)

 

반응형