11일차(1)/GIT(2) : 기본 명령어, vi editor, merge
- 명령 프롬프트, git bash 등에서 복사+붙여넣기가 안되는 경우!
우클릭 후 나오는 속성(git bash는 option)에서 아래 2개를 체크해주면 된다.
- 명령 프롬프트를 열면 기본 위치는 users/계정명 인데, 윈도우 계정명에 한글이나 띄어쓰기가 있으면 오류가 발생할 수 있으니 주의!
- 명령 프롬프트에서도 git 입력하면 git을 볼 수는 있다. 그런데 git bash로 하는 것이 더 쉽다...
- git bash : git 전용 커맨드 프롬프트라고 생각하면 된다.
- 커맨드는 $로 시작.
- git bash는 원래 Linux용이어서 리눅스 언어를 그대로 사용 가능하다.
ls : 현재 폴더의 내용 보기. 명령 프롬프트의 dir과 같다.
ls : 기본 파일명만
ls -l : 좀더 자세하게 한 줄로 설명
ls -al : 숨김 폴더까지 모두 보여주기
./ : 현재 디렉토리를 의미
../ : 상위 디렉토리를 의미
visual_work/git_test/hello 폴더가 있을경우
cd .. : 상위폴더로 이동 - hello → git_test
cd 폴더명/ : 폴더명(하위폴더)로 이동 - git_test → hello
mkdir 폴더명 : 폴더 생성 (make directory)
touch 파일명 : 파일 생성. 파일명은 확장자까지! ex) touch memo.txt
- 탐색기에서는 그냥 클릭해서 열면 되지만 명령 프롬프트에서는 별도의 텍스트 편집기로 파일을 열어야 한다.(vi editor)
↑요 맨밑의 하단 검은 부분에 현재 insert mode 인지 command mode인지 표시된다.
(*구글 검색키워드 : vi editor 사용법)
vi 파일명 : vi 탐색기 열기 ex) vi memo.txt
- 커맨드(esc) / 인서트(i) 의 두 가지 모드가 있다. 각각 esc 키와 i 키로 스위치 가능.
- command 모드: 에디터를 저장하고 종료하는 등의 명령이 가능
insert(edit) 모드 : 에디터 입력,편집 모드
(↑하단 검은 부분에 표시됨)
:wq : write and quit. 입력하면 저장 후 git bash로 빠져나오게 된다.
:q : quit. 그냥 빠져나오기(저장x)
cat 파일명 : 파일의 내용 확인 가능. 고양이로 본다!
- 내용을 수정하고 싶으면 vi 에디터로 다시 열어서 수정하면 된다.
- 주황색 원이 commit.라고 하면, (찍은 사진이라고 생각하면 된다.)
master가 가리키고, 커서도 얹혀져 있다. memo.txt를 커밋할 예정!
git init : 현재 위치한 폴더를 깃으로 관리하고 추적한다.(처음에 한번만 해주면 된다)
No commits yet / 아직 커밋되지 않음.
Untracked files / 아직 추적되지 않은 파일 ('U'로 표기하고, 중요하다)
- master ← HEAD : master에 커서인 HEAD가 얹혀잇는모양
- memo.txt를 add 하고 상태를 보면 아직 커밋되지 않았다고 나온다.
- add하는 것은 사진을 찍을 stage에 올린다는 의미.(사진찍을 준비!)
사진을 찍기 전의 완충공간 같은 것. → 무대에 올라가야만 사진을 찍을 수 있다.
- Changes to be committed / 변동사항이 커밋되어야 한다!
- 스테이지에서 내렸다가 다시 올려서 add, commit하기
git rm --cached 파일명 : unstage. add해서 stage에 올린 것을 다시 내리는 것
- 현재 커서가 가리키는(위치하는) 곳으로 파일의 상태가 바뀐다.(branch pointer=branch)
- git commit -m "memo.txt added" 라고 저장함
status를 보면 working tree clean 으로 나온다. 사진을 찍은 이후에 어떤 변화도 가하지 않은 상태.
[ Working Tree Clean ]
1) commit을 한 직후 어떤 변화도 가하지 않은 상태
또는
2) HEAD(커서)가 가리키고있는 commit과 현재 working tree가 일치하는 상태
- git log에서 commit 정보를 볼 수 있다 (커밋 ID / 누가Author / 언제Date commit 했는가)
- commit하면 master branch point가 만들어진다. HEAD가 얹혀진 포인터가 같이 이동함
- branch pointer는 필요에 따라 여러 개 만들 수 있다. → 원본을 따로 보관하고 복사본을 가지고 작업할 필요가 없다는 뜻!
- 수정해서 다시 보면 바로 수정된 사항이 있다고 나옴
커밋하고 싶으면 git add하고, 수정하고 싶으면 git restore하라고 되어 있다.
git commit -m : 커밋 관련해서 1줄로 메모를 남길 수 있다
git commet : vi 에디터 열림. 여러줄짜리 메모는 여기에 기록하면 된다.
- 새로운 branch pointer를 만들고, 그쪽으로 커서를 옮기면 상태가 달라지는것을 확인하는 테스트
git branch
* master : 마스터가 여기에 있다!
git branch 브랜치명: 브랜치 만들어주기
- lab1이라는 브랜치만듦
- lab1이라는 브랜치 포인터를 하나 더 만든 것이다.
- lab1 브랜치 지점에서 커밋을 한개 더 만든 것. 이 상태에서 커밋을 하면 커서가 얹혀 있는 브랜치와 함께 이동한다.
여기서 과거 커밋(master) 로 커서를 이동한다면 파일의 상태가 변한다.
- lab1 브랜치에서 텍스트를 추가하고 커밋하기
- master는 하나 뒤처져 있고, lab1이 하나 앞선상태이다.
- HEAD는 lab1에 있으므로 현재상태는 lab1으로 나온다.
- master로 커서(HEAD) 이동해보기
커서가 master에 있느냐 lab1에 있느냐에 따라 파일의 내용이 달라진다.
- branch pointer를 별도로 만들 수 있다는 것은 새로운 실험을 할 때
원본을 보호하기 위해 따로 저장해서 보관하지 않아도 된다는 뜻!
- lab1에서 새파일 만들고 새 커밋 하기
- lab1 브랜치에서 새파일추가
- lab1에서 새파일을 등장시키고, 없던 파일을 수정 (새 파일 만들고 memo.txt를 수정함)
- 사진이 찍혔던 파일은 modified 라고 나오고
찍힌적 없는 파일은 untracked file 이라고 나온다
- git log로 로그 확인해보기 : 지난 커밋들을 볼수있고 지금 HEAD가 lab1에 있는것을 확인 가능
- 커서가 어디 있느냐에 따라 파일의 현재 보이는 상태가 다르게 된다.
- (lab1)에 있을 때에는 두 개의 파일이 있고, 문자 열4줄이 나오지만,
(master)로 옮겨가면 파일은 1개, 문자열은 2줄로 바뀐다.
→ master가 있는 상태의 커밋에서는 파일이 새로 생성되지 않았기 때문에!
- working tree 는 현재 파일의 상태이다.
커서가 가리키는 작업공간의 파일 상태로 이동하는 것이다.
→ HEAD가 가리키는 사진으로 워킹트리가 변화한다.
- working tree 와 commit 을 구분한다.(현실과 사진을 분리한다)
- master는 main branch pointer이므로 계속 유지한다.
실험이끝났으면 master에 lab1을 병합해야 하는데, master포인트를 위로 올리면 되지 않을까?
→ 이 병합하는 과정을 merge라고 부른다.
- merge : 특정 브랜치의 작업내용을 원하는곳에 합치는것.
(간단하다. master branch pointer를 위로 올리면 끝!)
1) fast forward (빠르게되감기?) : 빠르게 브랜치포인터를 위로 올리면 끝나는 머지 방식
- master에다 lab1을 머지시킨다. (방향성이 중요하다!)
- HEAD가 master에 있는 상태에서 해야한다
- merge 하고싶다면 master branch를 lab1의 위치로 이동시키면 된다.
그러면 실험이 끝나고 병합하는 과정은?
마스터를 lab1단계로 올린다. 최종적으로는 아래와 같이 보이도록!
- master branch에서 git merge lab1 입력하면
병합 완료! 파일을 확인하면 lab1의 내용이 다 합쳐져 있다..
git branch -d lab1
- 병합이 완료되었으면 lab1은 삭제한다.
- 이후에 git log를 확인하면 master가 가장 최신 commit 상태라는 것을 알 수 있다.
참고)
2) merge commit (다음 게시물에서 더 자세히 다룸)
lab1에서 실험을 하고 있었는데 버그가 발생한 경우. master로 이동해서 다시 수정한다.
이 경우 master 가 갈라지고, 갈라지면 merge할때 단순히 위로 올릴 수는 없게 된다.
이 경우에는 두 지점의 병합을 위한 merge commit이 따로 발생한다..
(병합을 반영하기 위해서 새로운 사진을 찍어야된다는 뜻.)
참고) checkout이 되지 않는 오류발생시
: working tree가 깨끗한 상태여야만 checkout (포인터 이동)이 가능하다.
→ commit이 덜 되어있으면 이동되지 않는다!(add commit 하는 것이 가장 간단하다)
참고) master branch는 init하면 자동으로 생기는 branch pointer이다.
branch pointer ↔ HEAD 는 다르게 생각해야한다.
branch 위로 HEAD를 옮겨다니는 것이 checkout이다.
HEAD를 어디에 올려놓고 커밋을하느냐가 어떤 브랜치 포인터와 같이 이동하느냐를 결정한다.
'국비교육(22-23)' 카테고리의 다른 글
11일차(3)/GIT(4) : merge conflict (0) | 2022.10.20 |
---|---|
11일차(2)/GIT(3) : merge commit (0) | 2022.10.20 |
10일차(2)/GIT(1) : 설치 및 초기설정, 명령어 (0) | 2022.10.20 |
10일차(1)/DB_Oracle(8) : 제약조건, 시퀀스, 스칼라타입 등 (0) | 2022.10.19 |
9일차(3)/DB_Oracle(7) : DML, TCL, DDL, 제약조건 (0) | 2022.10.18 |