infinity : 무한한 성장가능성
지옥에서 온 관리자 Git 11~21 본문
Git 11강 - Git 복구왕 Reflog
git reflog
-> 한번이라도 커밋한 내용들이 다 남아있다.
-> 내용들로 커밋 내용을 확인한 후 git reset --hard 변경을 원하는 시점 입력
git commit --amend -m "변경하고 싶은 로그"
-> 만약 변경하고 싶은 로그를 제외한 로그 히스토리가 없을때 , git commit --amend -m 을 사용하면 최종 로그를 변경할 수 있다.
git reset --soft
->로그를 변경하고 싶다면 로그변경하고 싶은 시점의 이전 로그로 돌아가 다시 커밋한다.
Git 13강 - Git Branch기본개념
-> 기본적으로 main브랜치가 존재한다.
->idea 브랜치를 만들어 아이디 중복체크 기능에 대한 것을 구현한 후
-> main 브랜치에 합치고 싶다면...
(idea 브랜치에는 로그인 &회원가입에 대한 히스토리가 있고 로그인이 main브랜치와 idea브랜치의 공통조상이라 한다.)
(공통조상인 이유? 로그인 이후 분기가 나눠졌기 때문)
-> main브랜치와 idea브랜치의 형상이 다르다
-> main 브랜치는 회원가입->로그인 ->글쓰기
->idea 브랜치는 회원가입 ->로그인 -> 아이디 중복체크 API-> 아이디 중복체크 js ->아이디 중복체크 완료 임
->두개의 형상이 다를때 합치기 위해서는 ???
-> 공통조상과 각 브랜치의 끝점 2개를 합치는 경우를 3-way -merge라 한다.
(형상이 다를때 사용하는 것이 3-way-merge)
->위의 경우와 다른경우
-> 로그인이라는 main브랜치의 끝점과 아이디 중복체크완료라는 idea 브랜치 끝점을 합치는 경우는 fast-forward merge라 함
(즉 형상이 동일할 때 사용하는 것이 fast forward merge)
Git 14강 -브랜치 fast forward 이해하기
fast forward merge 이해 사진
->중요한 것은 대부분 긴 선을 브랜치라 이해하지만 실질적으로는 큰 브랜치 선이 생기는 것이 아닌 브랜치 포인터들이 각 브랜치 끝점을 가리키고 있는 구조다
-> main 브랜치포인터가 로그인에 있고 t라는 브랜치의 포인터가 아이디 중복체크완료라는 점에 있을때 main브랜치를 t브랜치포인터가 가리키고 있는 점으로 이동시키는 것을 fast forward merge 라 한다.
->main브랜치포인터가 로그인을 가리키고 있다 , t브랜치 포인터가 아이디 중복완료를 커밋하고 main브랜치가 글쓰기를 만들때 이때 실제 브랜치가 생성된다.
->Main브랜치포인터가 글쓰기에 있고 t브랜치포인터가 아이디 중복체크완료에 있을때 main브랜치가 아이디 중복완료를 main브랜치에 포함시키고 싶을때 합친다면 3-way -merge가 발생하고 main브랜치포인터는 아이디중복완료를 가리키고 t브랜치포인터는 아이디 중복완료에 있다.
Git 15강 -fast forward 실습
touch 는 파일을 만드는 명령어
-> 사용 예) touch 회원가입.txt 라 하면 회원가입.txt파일이 생성됨
git branch 지금까지 존재하는 브랜치 확인및 지금 사용하고있는 브랜치 확인
git branch 만들고 싶은 브랜치 이름 적기
git checkout 이동하고 싶은 브랜치이름
->브랜치가 이동됨
HEAD는 현재 사용하고 있는 브랜치로 이동된다 (checkout t라 할경우 HEAD는 t브랜치로 이동됨)
Main브랜치에서 아이디 중복체크를 합치고 싶다면
브랜치를 Main으로 이동시키고 git merge t (합치고 싶은 브랜치이름) 을 하면된다.
Git 16강 - three way merge 실습
git checkout -b 만들고싶은브랜치이름
-> 브랜치를 만들면서 해당브랜치로 이동까지 해주는 명령어임
3 way merge 도 동일하게 합칠 기준이 될 브랜치에 HEAD가 위치하게 만들고
git merge (합칠 브랜치) 할 경우 자동으로 merge됨
git merge t 이런식으로 입력하면
위의 창이 뜬다.
-> 노란색 부분이 로그를 어떻게 남길지 물어봄
-> i를 입력하면 해당 로그 변경가능
-> 남기고 싶은 로그로 확정후 esc -> :wq 하면 변경된 상태로 로그가 남겨짐
(q 는 그냥 나감 ,wq는 저장후 나감 )
->합친후 log를 확인해보면 아이디 중복체크 로그가 메인 브랜치에 포함되어있고
->위의 사진에서 확정한 로그 메시지가 최근 커밋 로그로 등록된것을 볼수있음
Git 17강 -merge 충돌해결
-> 위의그림을 설명하자면 로그인에서 마스터 브랜치와 T브랜치가 위치하다가, 마스터 브랜치에서 로그인파일을 수정하고 , T브랜치에서도 깉은 파일을 수정후, 마스터 브랜치로 merge할 경우, 같은 파일을 수정했기 때문에 충돌이 발생할 수 있다. (이때 merge 는 3way merge)
->충돌 발생원인은 같은파일의 같은 부분을 건들인다면 merge 할때 충돌이 발생
git merge t 하면
-> 자동 merge가 error이라고 알려주고
->오류난 파일을 열어보면
->위처럼 3줄이 생겨있다.
=====을 기준으로 위에것을 사용할 것이니 밑의것을 사용할 것이니 물어봄
-> 깔끔하게 남기고 싶은 내용만 남기고 지운다.
이후 git add . ,git commit 즉 직접 수정해 커밋한다.
->웬만하면 같은파일을 건들이지 않는 것이 중요하다.
Git 18강 -rebaase로 로그관리
rebase -> 로그를 다시 정리한다.
->노란색으로 칠해진 로그를 rebase명령어를 통해 정리한다.
->위의 3가지 로그를 변경하고 싶다.
rebase를 사용하기 위해서는 squash를 이해해야 한다.
->squash는 찌그러트리다. ,압축하다라는 뜻을 가진다.
-> 항상 압축할때는 과거로 찌그러트려야 함
->파란색 화살표 방향 , 즉 과거방향
->과거방향이 아닌 로그인완료 방향으로 찌그러트리면 과거 로그가 없어지며 붕뜬다.
->즉 과거방향으로 모든 코드를 모은다.
-> squash는 로그인아폼, 로그인완료를 함 , 로그인퇴근으로 압축
-> git rebase -i HEAD~3
->위의 git rebase -i HEAD~3 명령어를 입력하면 위의 사진이 뜬다.
해당 사진에서
->밑의 그림처럼 수정하여 , 즉 과거를 기준으로 합친다.
-> pick 와 s 할 커밋들을 지정후 나가면 , 위의 화면이 뜬다.
-> 해당화면에서 #은 주석이기때문에 신경쓰지 않고
->위의 사진처럼 남기고 싶은 로그로 수정후 저장 및 나간다 (:wq)
->위의 사진에서 총 3가지의 커밋메시지 부분중에 위치 관계없이 남기고 싶은 곳에 메시지를 수정후 저장하면 된다.
-> 만약 3개의 메시지를 모두 남긴다면
->하나의 커밋메시지로 총 3개의 부분들이 줄바꿈을 통해 남겨진다.
Git 19강 - github push 해보기
gitHub : 클라우드 저장소 (분산 버전관리가 가능한)
깃헙 클라우드 저장소를 부르는 키워드는 origin
git remote add origin ~(파일 저장소 주소 https주소 ) (즉 클라우드 저장소와 로컬 저장소를 연결해준다)
git remote -v 하면 연결된 orgin저장소가 뜬다.
git ls-remote ( git remote -v 와 동일하게 연결된 저장소가 뜬다.)
git push origin master (orgin에 있는 master라는 브랜치에 올릴게 )
push 는 병합과 파일업로드를 동시에 해준다.
Git 20강 -github pull해보기
git remote rm origin -> remote 연결을 잘못했을 경우 연결을 끊는 방법
git pull origin master -> origin 에 있는 master 브랜치를 다운받는다.
pull은 파일 다운로드와 병합을 동시에 해준다.
Git 21강 -github clone 해보기
1)git init
2)git remote
3)git pull
->위의 3가지 명령어를 모두 합친 명령어가 clone이다.
git clone clone해올저장소 주소(https~~~~~)