Frontend/Today I Learned

[git] 자주 사용하는 기초적인 git 명령어 정리

joycie416 2024. 8. 7. 22:07

개발 공부 일지를 올리기 위해 티스토리를 처음 만들었다. 첫 글로 올리기에 git 명렁어 정리가 좋을 것 같아 첫 주제로 선택했다. 겸사겸사 제대로 익힐 수 있고 혹시 까먹은 경우 다시 보기에 좋을 것 같다.


프로젝트를 진행하다보면 다른 사람의 코드에서 시작하는 경우가 많다. 이럴 때 git을 통해 github repository를 clone해서 해당 repository에 브랜치를 만들어 관리하게 된다.

 branch를 만들어 add/commit과  push/pull하는 방법에 대해 정리하려고 한다. (vScode 환경에서 진행한다.)

 

1. repository 주소 복사하기

github repository 메인

여기서 초록색 <> Code 버튼을 누르면 https 주소가 뜨고 이를 복사한다. 아래 친절하게 'cloning using the web URL'이라고 써있다.

 

2. git remote add

VScode 터미널에서 `git bash` 를 설정한 후 아래를 입력한다.

$ git remote add origin <복사한 github 주소>
$ git branch -M main
$ git push -u origin main

그러면 해당 repository의 git과 연결이 된다. 여기서 `main`은 기본 브랜치이다.

 

2. git add & commit

$ git add <파일이름.확장자>

위 코드를 입력하면 변경이 있는 파일을 올릴 준비를 할 수 있다(untracked에서 tracked로 바뀐다).

준비할 파일이 많은 경우 파일이름 대신 .을 입력하면 모든 변화가 있는 파일을 tracked로 바꿀 수 있다.

$ git add .

 

이후 commit 을 통해 git에 저장할 수 있다. add를 거친 파일들에 한해서 커밋 메세지가 적용된다.

$ git commit -m '<커밋 메세지>'

 

3. git push

이제 remote에 다시 적용해주기 위해 push를 해줘야 한다.

$ git push origin <브랜치 이름 ex : main>

만약 자신의 브랜치가 특정되어 있다면 브랜치 이름을 origin 뒤에 입력하면 되고, 그렇지 않은 혼자 해보는 경우 main을 입력하면 된다.

 

4. git pull

다른 사람들이 push를 통해 remote에 올려둔 업데이트를 로컬에 불러오려면 pull해야 한다.

push할 때처럼 특정 브랜치에서 가져올 수 있다.

$ git pull origin <브랜치 이름 ex : main>

 

 

5. git merge

위에서 remote(원격)와 로컬이라는 이야기를 하는데, 사실 초보자는 모르는 것이 있었다. origin이라는 것을 쓰면 github에 보이는 원격과의 상호작용을 의미하게 된다. 초보자인 우리 팀이 한 실수로, 주된 브랜치가 remote에서 업데이트되면 pull을 통해 로컬의 주 브랜치와 각자의 브랜치에 차례로 pull했는데, 이렇게 하면 안된다고 한다. 즉 우리는 아래 두 코드를 차례로 실행했었다. (아래 코드에서 git checkout은 나중에 다루겠다.)

$ git pull origin <주 브랜치>
$ git checkout <내 브랜치>
$ git pull origin <내 브랜치>

이렇게 하면 주 브랜치와 내 브랜치 모두 remote에서 pull을 해오는 것과 같은데.. 자세히 이해하지 못했지만 그렇게 하면 안된다는 피드백을 받았다. 주 브랜치는 remote에서 pull하는 것이 맞지만, 로컬 내 브랜치는 pull한 후인 로컬 주 브랜치에서 merge를 해야 한다고 하셨다. 즉 아래와 같이 실행해야 한다.

$ git pull origin <주 브랜치>
$ git checkout <내 브랜치>
$ git merge <내 브랜치>

 

6. git checkout / git switch

위에서 잠깐 봤지만 git checkout을 통해 브랜치를 바꿀 수 있다.

test_hi 브랜치에서 dev 브랜치로 바뀌었다.

 

checkout과 switch는 거의 동일한 명령어지만 switch가 더 최근 명령어라고 한다.

 

switch를 이용해 로컬 브랜치를 생성하려면 다음과 같이 입력하면 된다. (-c는 create를 의미한다)

$ git switch -c <브랜치 이름>

이후 `git pull origin <브랜치 이름>`을 입력하면 github에도 반영된다.

checkout을 이용하는 경우 아래와 같이 하면 된다. 이후 동일하게  pull해야 반영된다.

$ git checkout -b <브랜치 이름>

 


 

위에서 처음부터 repository에 main브랜치를 추가하는 것까지 했다. 그러면 기존에 작성된 github를 가져오려면 어떻게 할까?

git clone

기존에 작성된 github를 가져오려면 git clone을 이용하면 된다.

git clone

 

엔터를 치면 cloning into <폴더명>...이라고 뜬다. 이렇게 해당 repository 폴더를 현재 폴더에 복사할 수 있다. 

 

아래 코드처럼 .을 추가하면 폴더 전체가 아니라 파일들만 복사할 수 있다.

$ git clone <복사한 github 주소> .

 

 

위에서 처럼 git clone을 통해 먼저 repository를 복사해온 경우 git init을 실행하지 않아도 된다. git init은 무엇인가??

 

git init

$ git init

로컬에서 처음 개발을 시작해서 추후 github respository에 연결하기 전에 git init을 통해 초기화할 수 있다. 이후 위에서 배운 git add, commit 을 할 수 있다. github repository에 연결하려면 1번부터 따라하면 된다.

 


아래 내용은 add/commit으로 대체할 수 있으나 좀더 적절한 방법이라고 소개받아 작성하게 되었다.

git stash

링크의 내용을 거의 다 가져와서 정리했다. 좀더 자세한 내용은 해당 링크를 읽어보는 것이 좋다.

 

위에서 git merge에 대해 이야기할 때 같이 들은 이야기다. commit은 기능이 완전히 다 구현됐을 때 사용하는 것이라고 한다. 그런데 commit을 하지 않으면 브랜치를 이동할 수 없다. 이때 우리 팀은 add, commit을 한 후 브랜치를 이동했는데 이러면 쓸데없는 commit이 많아져 적절하지 못하다고 한다. 이때 git stash를 통해 commit을 대신에 현재 상태를 임시 저장할 수 있다.

아래 두 코드 중 하나를 실행하면 된다.

$ git stash
$ git stash save

 

stash를 통해 임시 저장된 목록은 아래 코드로 확인 가능하다.

$ git stash list

 

그러면 아래와 같은 내용이 뜬다.

stash@{0}: WIP on master: 049d078 added the index file
stash@{1}: WIP on master: c264051 Revert "added file_size"
stash@{2}: WIP on master: 21d80a5 added number to log

 

임시 저장된 내용을 가져오려면 아래 두 코드 중 원하는 방식을 따르면 된다. 이름이 명시 되지 않은 경우 가장 최근 stash를 가져온다.

$ git stash apply
$ git stash apply <stash 이름 ex : stash@{2}>

 

apply만 하면 임시 저장된 정보가 적용만 되고 지워지진 않는다. 지우려면 아래 코드를 사용하면 된다. 마찬가지로 이름을 명시하지 않으면 가장 최근 정보가 삭제된다.

$ git stash drop
$ git stash drop <stash 이름>

 

임시 저장 정보를 적용과 동시에 제거하려면 아래 코드를 사용하면 된다.

$ git stash pop

 

임시저장하지 않아도 될 내용을 저장한 경우 아래 코드를 통해 되돌릴 수 있다. 마찬가지로 이름을 명시하지 않으면 가장 최근 정보가 적용된다.

$ git stash show -p | git apply -R
$ git stash show -p <stash 이름> | git apply -R

 

 


덤. 아래 코드를 따라해 git에 원하는 명령어를 추가할 수 있다.

$ git config --global.<원하는 명령어 이름> '!git <실행할 명령어 코드>'