나의 발자취

엘리스 Git & GitLab 단축 명령어 설정, 브랜치 생성/삭제/그래프 보기, 깃랩 원격 저장소 연결 및 push/pull 본문

앨리스 교육

엘리스 Git & GitLab 단축 명령어 설정, 브랜치 생성/삭제/그래프 보기, 깃랩 원격 저장소 연결 및 push/pull

달모드 2021. 9. 26. 19:45

오늘은  엘리스에서 배운 내용을 토대로 제일 많이 쓰이는 git!!의 메인 기능에 대해 포스팅하겠다.

엘리스에서 2-3주차 즈음에 Git 사용법을 배웠는데, 이고잉 코치님께서 강연을 해주셔서 개인적으로는 한번에 이해가 너무 잘되었고 깃에 대해 확실한 개념을 가지게 될 수 있었다. 정말 감사드린다.

아래와 같이 정리를 하면서 조금이나마 기억에 남은 것도 있지만 이고잉 코치님의 강의력이 너무 좋으셔서 만약 깃에 대해 이해가 되지 않는다면 이고잉 코치님의 깃 강의를 들어보기를 추천한다.

 

단축 명령어 설정

git log --oneline --all 치는것이 번거로워서 단축어 git l로 바꿨다.

git config --global alias.사용할 단축어 "대체할 기존 명령어"

 

git config --global alias.l "log --oneline --all"

=> log --oneline --all 을 l로 별명을 지정

=> git log --oneline --all 대신 git l 로 사용 가능

 

단축어를 해제하려면

git config --global --unset alias.[설정한 별칭] 

=> 설정한 별칭 제거

=> ex) git config --global --unset alias.l

=> 참고: alias가 아닌 다른 옵션도 제거 가능 (ex. git config --global unset user.email)

 

<참고 : 여러 명령어를 한줄에 처리하기>

git add exp.txt; git commit -am “exp 1”;

⇒ 세미콜론 (;)을 사용하여 여러 명령어를 자동화

 

git add exp.txt && git commit -am “exp 1” && …;

=> 세미콜론 대신 &&를 사용하면 앞에 명령어 성공시 다음 명령어가 실행 (안정성)

 

다시 본론으로 돌아와서, 현재 상태이다. 새로운 실험 파일을 만들고 exp1이라는 메시지로 커밋했다.

git checkout master으로 head의 위치를 Master로 옮기면 아래와 같이 더이상 exp1을 가리키는 노드는 없다. 

하지만 그렇다고 해서 exp1이 삭제된 것이 아니다.

다시 HEAD가 exp1을 가리키도록 하려면 체크아웃으로 exp1의 CID를 가리키도록 하면 돌아갈 수 있다.

$ git checkout 40f1158

하지만 사실 번거롭다. 그리고 HEAD를 다시 exp1으로 옮겼으므로, 현재 상태는 detached HEAD 상태이다.

그러면 아래와 같이 detached HEAD이니 switch 명령어를 사용하라는 참고사항이 나온다.

브랜치를 새로 생성하면서 HEAD->해당 브랜치로 체크아웃하는 git checkout -b <new-branch-name>도

git switch -c <new-branch-name> 으로 사용할 수 있다. 

이제 새로운 브랜치를 생성할것이다.

 

브랜치 생성 / 삭제 / 그래프

기본적으로 git branch <브랜치명> 으로 새로운 브랜치를 생성수 있다.

$ git branch exp

브랜치를 만든다고 해서 HEAD가 자동으로 그 브랜치를 가리키는 것이 아니므로, 체크아웃을 해준다.

$ git checkout exp

브랜치 생성 전 상태 -> exp 브랜치 생성 -> exp로 체크아웃 -> 체크아웃 한 상태(attached HEAD)

그리고 현재 체크포인트에서 작업을 추가한 후 exp 2라는 체크포인트를 추가할것이다.

$ git add exp2.txt

$ git commit -m "exp2"

HEAD가 마스터를 가리키도록 하여, exp 브랜치만 남아있도록 할 것이다.

$ git checkout master

이 체크포인트에서 새로운 작업을 추가한 후, 변경사항에 대해 커밋을 할 것이다.

master.txt라는 파일을 추가하였고 master 1 이라는 메시지로 커밋했다.

현재 상태를 확인해보면

CID가 생성된 최근순서대로 나타나므로 그래프로 정리를 해서 볼 필요가 있다. 이때 필요한 명령어는 

$ git log --oneline --all --graph 이다. (git l 단축어를 이 명령어로 업데이트했다.)

그러면 아래와 같이 그래프가 나타나는 것을 볼 수 있다!

현재 상태에서 또 작업을 추가하고, master2라는 이름으로 커밋하면

아래와 같이 브랜치 가지가 길어진다.

 

브랜치를 삭제하려면, 해당 브랜치가 위치한 CID 주소를 복사해

$ git checkout 40f1158로 detached HEAD상태로 만들어 준 후 git branch -d <브랜치명>으로 삭제한다.

$ git branch -d exp

detached HEAD -> exp 브랜치 삭제 후 상태

이제 이 상태에서 깃랩의 원격저장소에 push를 해주겠다.

깃랩 원격저장소 생성, 연결, 최초 push하기

깃랩에서 프로젝트를 만들고, git remote add <원격저장소 이름> <https 주소> 명령어를 통해 원격저장소와 연결한다.

$ git remote add origin https://kdt-gitlab.elice.io/est22/210625_branch.git

(origin이라는 이름을 가진 원격주소를 추가하라는 뜻으로, 아래 그림 참고)

그리고 git push를 해준다.

위와 같이 로컬을 원격저장소(origin)에 연결하고 push를 하면 로컬의 git이 origin에 그대로 옮겨진다.

그러면 로컬의 master, 원격의 origin이 연결되는 것이다.

origin/master 이라는 브랜치가 생성되면서, 현재 HEAD->master가 가리키고 있는 곳을 가리키게 된다. 

(아래 참고)

만약 로컬에서 새로운 파일을 생성하고 커밋하면, 아래와 같이 HEAD와 master이 새로운 파일을 가리키게 된다.

그렇다면 로컬의 모든 깃이 원격에 복사되는것일까?

정답은 origin/master 브랜치가 가리키는 곳이 아래와 같이 HEAD->maser가 가리키고 있는 같은 곳으로 변경된다.

최초로 만들어진 원격저장소에 git pull만을 작성하면 아래와 같은 경고가 뜨는데, 

$ git push --set-upstream origin master

--set-upstream : 로컬저장소와 원격저장소의 연결을 뭘로 할것인지 정하는 것이다.

origin master : 원격의 origin과 로컬의 master 연결

 

그대로 위의 명령어를 복사해서 붙여넣고 엔터를 친다.

 

그러면 깃랩의 아이디와 비밀번호를 입력하게 되고, 성공하면 연결 및 push가 완료된다!

그러면 이제 origin master 브랜치가 새로 생겼다!

* master 옮기는 법 : git reset --hard <옮길 CID>

* 직전 커밋 메시지 변경법 : git commit --amend -m "변경할 메시지"

이렇게 하면 CID가 바뀌게 된다 = 이전 커밋메시지 기록도 남아있다!

 

 

깃랩 원격저장소에 push하기

이 상태에서 수정할걸 하고

$ git commit -am "work3"

를 입력했다.

위와 같이, 아직 원격 저장소에는 아직 work3가 반영되지 않았다. 

push를 통해 원격 저장소에 업로드하자!

$ git push

그러면 위와 같이 origin/master가 가리키는 곳이 HEAD와 master의 위치로 옮겨지면서 원격 저장소에도 반영된 것을 알 수 있다. 

깃랩 원격저장소 pull하기

일단 빈 폴더(로컬명 work4)를 생성하고, 원격 저장소에 등록된 레포지토리(로컬명 work3)를 가져오기 위해 해당 http 주소를 복사한다.

터미널을 열고 

git clone <원격저장소 주소> .

을 입력한다. 마침표의 의미는 현재 디렉토리라는 뜻이다.

마침표를 찍어주지 않으면 내가 현재 연 폴더가 아니라, 내가 현재 연 폴더 안에 또 폴더가 생성되어.. 폴더를 생성한 의미가 없게 된다.

clone 명령어는 init, git add, pull을 한꺼번에 할 수 있는 명령어이다.

 

* 폴더를 지우려면

rm -r <directory name> 혹은 rm -rf <directory name>을 통해 지운다.

여기서 -r은 recursively, -f 는 force 를 의미한다.

왼쪽은 work 3, 오른쪽은 work 4의 git log 이다.

origin/HEAD는 별로 신경쓰지 않아도 된다. 사용도가 낮기 때문

 

ls -al로 현재 디렉토리 내 파일을 모두 조회하면

여기서 앞에 d가 붙은 것은 directory를 의미한다.

 

work3 workspace에서 작업을 수정한 후, 커밋을 하여 "work 4" 이라는 새로운 작업이 생성되었다.

$ git commit -am "work4"

$ git l

$ git push

 

자... 그리고 work4 workspace에서 수정된 변경사항을 업데이트하자. 일단 pull 전에 깃의 log를 확인하여 업데이트된 내용이 있나? ?확인했더니 아래와 같이 HEAD -> master , origin/master, origin/HEAD 네 개의 브랜치가 원래 같은 곳에 위치해있었는데

원격 레포지토리 브랜치들이 가리키는 것이 제일 위의 최신에 있는 것을 보아 로컬에도 work4를 업데이트해야한다는것을 알 수 있다.

$ git pull을 한다.

그러면 (위 command line 출력결과는 너무 길어서 자름) 아래와 같이 업데이트가 잘 된것을 알 수 있다!

extensions에서 git graph를 다운받아서 gui로 체크아웃을 할 수 있다.

파란 테두리가 attached, 회색 테두리가 detached.

'앨리스 교육' 카테고리의 다른 글

엘리스 AI 트랙:: 데이터분석 팀프로젝트  (0) 2021.10.24
엘리스 13주차:: 팀스터디  (0) 2021.09.26
JS:: 프로퍼티와 메서드  (0) 2021.07.08
JS:: 자바스크립트 기본 함수  (0) 2021.07.08
CSS:: grid  (0) 2021.07.06
Comments