[ 5일 완성 코스 1일차 ]
1장 - 깃 시작하기
01-1 지옥에서 온 관리자, 깃
깃으로 무엇을 할 수 있을까?
1. 버전관리
2. 백업하기
3. 협업하기
01-2 깃 설치하기
깃 환경 설정하기
사용자 정보를 git config 명령어로 설정
$ git config --global user.name "username"
$ git config --global user.email "id@gmail.com"
--global 옵션
현재 컴퓨터에 있는 모든 저장소에서 같은 사용자 정보를 사용하도록 설정
01-3 리눅스 명령 연습하기
02장 깃으로 버전 관리하기
02-1 깃 저장소 만들기
깃 초기화하기 - git init
$ mkdr hello-git
$ cd hello-git
$ git init
hello-git 디렉토리에 저장소(리포지토리)를 만들기 위해 git init 명령어 사용
02-2 버전 만들기
스테이지와 커밋 이해하기
작업트리
파일 수정, 저장 등의 작업을 하는 디렉토리로 '작업 디렉토리' 라고 함
앞서 만들었던 hello-git 디렉토리가 작업 디렉토리가 됨
즉 우리 눈에 보이는 디렉토리가 작업 트리
스테이지
버전으로 만들 파일이 대기하는 곳
스테이징 영역(staging area)이라고 부르기도 함
예 ) 작업 트리에서 10개 파일을 수정했는데 4개의 파일만 버전으로 만들려면 4개 파일만 스테이지에 넘겨주면 됨
저장소(repository, 레포지토리)
스테이지에서 대기하고 있던 파일들을 버전으로 만들어 저장하는 곳
스테이지와 저장소는 눈에 보이지 않음.
깃에서 버전을 만드는 단계
1.
작업트리 -> 스테이지 저장소
hello.txt hello.txt
hello.txt 파일 문서를 수정하고 저장하면 작업트리에 있게됨.
수정한 hello.txt 파일을 버전으로 만들고 싶을 때 스페이지에 넣음.
2.
작업트리 스테이지 -> 저장소
hello.txt hello.txt
파일 수정을 끝내고 스테이지에 넣었다면 버전을 만들기 위해서 깃에게 커밋 명령을 내림.
커밋 명령을 내리면 새로운 버전이 생성되면서 스테이지에 대기하던 파일이 모두 저장소로 저장됨
정리해 보자면 먼저 작업트리에 문서를 수정하고 수정한 파일 중에서 버전으로 만들고 싶은것을 스테이징 영역, 즉 스테이지에 저장함. 그리고 스테이지에 있던 파일을 저장소로 커밋하는것이 깃이 버전을 만드는 순서 !
작업 트리에서 빔으로 문서 수정하기
$ vim hello.txt
hello.txt를 생성하고 데이터를 입력
$ git status
상태를 확인해보면 untracked files가 있다고 나옴
untracked files란 깃에서 한번도 버전 관리하지 않은 파일을 말함
작업트리 스테이지 저장소
hello.txt
수정한 파일을 스테이징하기 - git add
$ git add hello.txt
git add = git에서 스테이징 할때 사용하는 명령어
버전을 만들 준비를 하라고 스테이지에 올림
$ git status
상태를 확인해보면 untracked fles라는 문구가 change to be committed 로 변경됨
new file : hello.txt 라고 표현됨
add
작업트리 -> 스테이지 저장소
hello.txt hello.txt
스테이지에 올라온 파일 커밋하기 - git commit
$ git commit -m "message1"
git commit = 깃에서 파일을 커밋하는 명령어
-m 옵션은 커밋과 함께 저장할 메시지
$ git status
상태를 보면 nothing to commit, working tree clean 이라고 나옴
작업트리에 버전으로 만들 파일이 없고(nothing to commit), 작업트리도 수정사항없이 깨끗하다(working tree clean ). 라고 출력
$ git log
방금 커밋한 버전에 대한 설명이 나옴
commit
작업트리 스테이지 -> 저장소
hello.txt hello.txt
스테이지에 있던 hello.txt파일의 버전이 저장소에 만들어짐
스테이징과 커밋 한꺼번에 처리 - git commit -am
$ vim hello.txt
파일 수정 후
$ git commit -am "message2"
add (스테이징) 와 commit (커밋) 을 동시에 처리
02-3 커밋 내용 확인하기
변경사항 확인하기 - git diff
변경사항을 확인 할 수 있음.
02-4 버전 만드는 단계마다 파일 상태 알아보기
$ git log --stat
// 커밋과 관련된 파일까지 함께 살펴봄
$ git commit --amend
// 방금 커밋한 메시지 수정하기
02-5 작업 되돌리기
작업 트리에서 수정한 파일 되돌리기 - 예전버전 : git checkout 최신버전 : git restore
파일을 수정 한 뒤에 정상작동을 하지 않는 등의 이유로 수정한 내용을 취소하고 가장 최신버전으로 돌려야 할 경우
$ vim hello.txt
- 파일 수정 작업 수행
- 기존 'a'만 있던 파일에 'a b'로 파일 수정
$ git status
- changes not staged for commit
hello.txt 가 수정되었지만 아직 스테이지에 올라가 있지 않음
$ git restore -- hello.txt
- restore 처리 작업 수행
$ cat hello.txt
- 'a'만 존재
- 'b'를 추가 했던 작업이 되돌려짐
스테이징 되돌리기 - git reset HEAD 파일이름
restore = 파일의 수정을 취소하고 원래대로 돌림
reset = 수정된 파일을 스테이징 했을 경우, 스테이징을 취소함
$ vim hello2.txt
-' a b c d ' 가 들어있는 파일 생성
$ git add hello2.txt
$ git status
- 스테이지에 올린 후 상태값 확인
changes to be committed : modified : hello2.txt
$ git reset HEAD hello2.txt
- unstaged changes after reset
수정된 hello2.txt가 스테이지에서 내려졌다는 메시지 출력됨
$ git status
changes not staged for commit : modified : hello2.txt
다시 git 상태확인 하니 아직 스테이지에 올라가기 전으로 돌아와 있는것을 확인 가능
최신 커밋으로 되돌리기 - git reset HEAD^
수정된 파일을 스테이징하고 커밋까지 했을때, 가장 마지막에 한 커밋을 취소하는 방법
$ vim hello2.txt
' a b c d e ' 로 수정 처리
$ git commit -am "message4"
- 스테이징과 커밋을 함께 실행
$ git log
- 커밋 된것 확인
$ git reset HEAD^
커밋도 취소되고 스테이지에서도 내려져서 작업트리에만 hello2.txt가 존재하게 됨
git reset 명령어 옵션
--soft HEAD^
최근 커밋을 하기 전 상태로 작업 트리를 돌림
--mixed HEAD^
최근커밋과 스테이징을 하기전 상태로 작업트리를 되돌림 ( DEFAULT 옵션 )
--hard HEAD^
최근 커밋과 스테이징, 파일 수정을 하기 전 상태로 작업트리를 돌림 ( 해당 옵션을 사용하면 복구 불가능 )
특정 커밋으로 되돌리기 - git reset 커밋 해시
git reset HEAD^는 최신 커밋으로만 되돌릴수 있지만 커밋 해시는 특정 버전으로 되돌리고 이후 버전을 삭제할 수 있음
( HEAD -> master ) = 최신 버전의 커밋 이라는 뜻
$ git log
commit : gh13j4lk1jklgrwjlt435512890 ( HEAD -> master )
Author : id정보 < email 정보 >
Date : ...
R4
commit : nnejklgjwlktkpo23fkldsfkdsfa
Author : id정보 < email 정보 >
Date : ...
R3
commit : j662mkgkfml131242
Author : id정보 < email 정보 >
Date : ...
R2
commit : abbadgmkjldkj24vnkl1
Author : id정보 < email 정보 >
Date : ...
R1
[ 사용시 주의 사항 ]
예를 들어 reset A 를 입력한다면 A 커밋을 리셋하는것이 아니라 최근 커밋을 A로 리셋함
즉, A커밋을 삭제하는 것이 아니라 A 커밋 이후에 만들었던 커밋을 삭제! 하고 A 커밋으로 이동하겠다는 의미
commit 옆에 있는 커밋 해시를 선택 하고 복사
$ git reset --hard 복사한 커밋 해시 = $ git reset --hard j662mkgkfml131242
- HEAD is now at j662mk R2
커밋 해시 위치가 옮겨졌다고 나타남
방금 복사해서 붙인 커밋이 가장 최근의 커밋이 된 것 !
$ git log
commit : j662mkgkfml131242 ( HEAD -> master )
Author : id정보 < email 정보 >
Date : ...
R2
commit : abbadgmkjldkj24vnkl1
Author : id정보 < email 정보 >
Date : ...
R1
- R4, R3는 삭제 되고 R2가 가장 최근 커밋이 되었음
커밋 삭제하지 않고 되돌리기 - git revert
나중에 사용할 것을 대비해서 커밋을 되돌리더라도 취소한 커밋을 남겨둬야할 경우 사용
$ vim rev.txt
- 기존 rev.txt 파일 'a b' 를 ' a b e ' 로 수정
$ git commit -am 'R5'
$ git log
commit : p4pwkejjklsd22mklm( HEAD -> master )
Author : id정보 < email 정보 >
Date : ...
R5
commit : j662mkgkfml131242
Author : id정보 < email 정보 >
Date : ...
R2
commit : abbadgmkjldkj24vnkl1
Author : id정보 < email 정보 >
Date : ...
R1
가장 최근에 커밋한 R5 버전을 취소하고 R2 로 돌아가려고 할 경우 revert를 사용
$ git revert 복사한 R5 커밋 해시 = $ git revert p4pwkejjklsd22mklm
- revert 명령을 실행 하면 커밋 메시지를 입력할 수있음
' 일시적으로 커밋 보류함 ' 입력
reset의 경우 취소할 커밋의 해시가 아니라 되돌아갈 커밋 해시를 지정했지만
revert의 경우 취소할 커밋해시를 지정한다는 점을 기억해야함
$ git log
commit : a3bb4ghk5jjghddd ( HEAD -> master )
Author : id정보 < email 정보 >
Date : ...
Revert "R5"
This reverts commit p4pwkejjklsd22mklm.
commit : p4pwkejjklsd22mklm
Author : id정보 < email 정보 >
Date : ...
R5
commit : j662mkgkfml131242
Author : id정보 < email 정보 >
Date : ...
R2
commit : abbadgmkjldkj24vnkl1
Author : id정보 < email 정보 >
Date : ...
R1
- R5를 revert한 새로운 커밋이 생성, 기존의 R5 역시 사라지지 않았음.
R5를 지우는 대신 R5에서 변경했던 이력을 취소하는 커밋을 생성 !
$ cat rev.txt
- 'a b' 출력
R5에서 추가한 'e'가 없어 진것을 볼수 있음.
[ 현재까지의 revert는 최근에 한 커밋으로 돌아갈 수있음 ]
R5가 아닌 R2의 커밋해시를 입력하면 충돌이 일어남 ~ 여러개의 commit을 돌리는 것은 추후에 다룰 예정임
'Git' 카테고리의 다른 글
깃허브로 협업하기, 깃허브에서 개발자와 소통하기 (0) | 2022.01.04 |
---|---|
깃허브로 백업하기 (0) | 2021.12.30 |
깃과 브랜치 (0) | 2021.12.29 |