Git, BitBucket, SourceTree

Git 사용방법 총정리 하기 # github branch stash

Developer88 2024. 9. 13. 11:43
반응형

오늘은 Git을 사용하는 방법에 대해서 총정리해 보도록 하겠습니다.

이 글은 Git을 VSCode 나 Android Studio 혹은 Source Tree같은 IDE나 그래픽 버전관리프로그램의 도움없이도,

기본적인 기능들을 다룰 수 있도록 하는 것을 목표로 작성하였습니다.

 

1. Git의 설치

1-1. Mac

Git의 설치는 MacOS를 기준으로 Homebrew 를 사용하면 편리한데요.

Homebrew가 설치되어 있지 않다면, 터미널에서 아래 명령어로 Homebrew를 설치해주면 됩니다.

 

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

 

이제 설치된 homebrew를 이용해서 아래 명령어로 git을 설치해주면 됩니다.

 

brew install git

 

1-2. Window

윈도우에서는 아래 사이트에서 설치파일을 다운로드 받아 실행해주면 됩니다.

>> https://git-scm.com/download/win

 

2.  Git 최초 설정

git을 설치되고 나면 가장 먼저하는 것은 Git을 설정하는 것 인데요.

아래와 같이 이 컴퓨터에서 git을 사용할 때, 어떤 username과 email로 할 것인지를 정하는 것 입니다.

Git은 이제 이 정보를 이용해서 해당 컴퓨터내의 모든 디렉토리에서 이 정보를 가지고 버전과니를 해 줍니다.

 

git config --global user.name "김이사"
git config --global user.email kim24@test.com

 

 

"--global" 옵션은 컴퓨터에서 global하게 해당 정보로 git을 설정한다는 것 이구요.

프로젝트마다 다르게 사용하고 싶다면,

"--global" 옵션은 빼고 각각의 프로젝트 폴더에서 다르게 설정해 주면 됩니다.

 

3. 프로젝트별로 버전관리 시작하기

위에서는 컴퓨터에게 누가 Git을 사용하는지 유저에 대해 알려주었는데요.

 

이제는 프로젝트별로 Repository(저장소)라는 것을 만들어서 버전관리를 시작할 차례입니다.

먼저 작업할 프로젝트의 폴더로 이동해 줍니다.

 

혹시 맥에서 프로젝트의 주소를 모를경우,

"cd" 를 터미널에 미리 입력하고 space를 눌러 한칸을 비우고,

파인더에서 해당폴더를 드래그앤 드롭해 준 다음 엔터를 눌러주면,

해당 프로젝트의 디렉토리가 터미널에 나오게 됩니다.

이후, 엔터를 입력하면 해당 디렉토리로 이동하게 되겟지요.

 

이제 initialize(초기화)라는 것을 해야하는데요.

아래 명령어를 터미널에 입력해 주기만 하면 됩니다.

 

git init

 

그럼, 아래와 같이 특정 프로젝트 폴더에 repository가 초기화되었다는 텍스트를 보게 됩니다.

이제 저장소가 생기고 버전관리가 시작된 것 이지요.

 

 

4. Git에 파일 add하기

4-1. stage단계

git을 사용하기에 반드시 알아야 하는 개념이 stage인데요.

git은 stage단계라는 버퍼영역을 두어서 저장소의 버전관리를 합니다.

이 단계에 올렸다가 commit을 통해서 최종적으로 git의 repository에 저장을 하게 되는 것 인데요.

 

commit을 통해서 repository에 확정적으로 올리기 전에,

임시적으로 저장해 놓는 단계정도로 생각하면 쉬울 것 같습니다.

굳이 비유를 하자면, 볼펜으로 적기전에 연필로 미리 써놓고,

이걸로 되겠다 싶으면 볼펜으로 써서(커밋에서 Repository에 저장) 확정하는 것으로 보면 되겠네요.

(좀 억지스럽기는 하지만, 좀 더 적절한 비유가 생각나면 수정해 보겠습니다.)

 

4-2. add 로 stage 단계로 올리기

stage단계로 특정파일을 stage에 올려주려면 다음의 add명령어를 이용해 주면 됩니다.

"git add first.txt second.txt" 같이 한번에 여러개파일을 나열 할 수도 있습니다.

 

git add <원하는 파일>

 

 

폴더에 해당하는 모든 파일을 한번에 add 해서할 수도 있겠지요.

그럴 때는 아래와 같이 "."(닷)을 이용해 주면 되는데요.

주의할 점은, 중요한 key값이라든가, 공유되서는 안되는 정보들은 따로 파일로 빼놓고,

add되지 않도록 주의가 필요합니다.

repository에 들어가지 않도록 하기위함입니다.

 

git add .

 

4-3. Status 보기

git상태를 보기 위해서는 아래 명령어를 사용해 주면 됩니다.

어떤 파일들이 Stage로 올라가 있는지, 수정된 파일은 있는지 등에 관한 정보를 얻을 수 있습니다.

 

git status

 

4-4. Commit 하기

이제 최종적으로 정보를 저장하는 commit 단계로 들어가보겠습니다.

commit은 하나의 의미있는 작업단위를 끝냈을 때 하는 것이 보통인데요.

앱에 어떤 기능을 추가하였거나, 버그를 픽스하였을 경우 하게되겠지요.

 

이 Commit 단계로 올라가면 수정하는 것이 훨씬 복잡해지므로, 신중하게 해야합니다.

명령어는 아래와 같은데요. stage에 올라간 파일들을 최종적으로 저장해 줍니다.

이 때 추가로 작성하는 커밋 메시지는 협업하는 사람들이 잘 알아들을 수 있도록 간결하게 작성해주는 것이 좋습니다.

 

git commit -m "커밋 메시지"

 

 

만약 개행을 하고자 한다면,

따옴표(")를 넣고 내용을 적은 후, 

다음 줄에 넣을 내용을 입력하고, 따옴표(")를 다시 넣고 닫아주기만 하면 됩니다.

 

git commit -m "Add 2.file   <-- 여기서 엔터를 눌러 개행 후에 다음 줄에 입력
Remove 1.file"

 

4-5. gitignore 추가하기

원격저장소에 저장되면 안되는 API키나 패스워드들,

캐쉬파일이나 임시파일들은,

git에서 버전관리를 하면 안됩니다.

 

이러한 파일들은,

".gitignore" 라는 파일명으로 프로젝트폴더에 저장하면,

파일이 변경되어도 Stage단계에 들어가지 않도록 무시되어집니다.

Stage에 올라가지 못하니, 커밋도 않되고, 아래에서 배울 원격저장소에도 들어가지 않습니다.

 

파일을 개발하는 IDE에서 만들어도 되구요.

터미널에서 아래의 리눅스 명령어로 만들어서 저장해도 됩니다.

 

touch .gitignore
nano .gitignore

 

gitignore에 대해서 특별히 어렵게 생각할 것은 없는데요.

주석은 "#"을 사용하구요. 무시할 파일명을 넣어주기만 하면됩니다.

아래 사이트와 같이 플랫폼이나 언어에 따라, gitignore를 제공해주는 사이트들이 있는데요.

github에서도 gitignore샘플을 제공해 줍니다.

>> https://www.toptal.com/developers/gitignore

 

만약 파일이 이미 git에 올라가 버린 경우라면,

먼저 해당 파일명을 ".gitignore"에 추가한후에

아래 명령어로 해당파일을 지운후, 다시 한번 커밋을 해 주어야 합니다.

그리고 나면 ".gitignore"가 동작되어서 버전관리를 멈추게 됩니다.

 

git rm <지울 파일명>

 

4-6. Diff

A. Diff

위에서 바로 커밋하는 것에 정리하였는데요.

사실 커밋하기전에, 무엇이 바뀌었는지 비교를 해보는 것이 좋습니다.

이 때 사용하는 명령어가 바로 diff 인데요. 아래와 같이 사용해 주면 됩니다.

 

git diff

 

실행해보면 아래와 같이 삭제한 부분과 추가한 부분이 나오는 것을 볼 수 있습니다.

 

 

화면에서 나올때는 "q"를 눌러주면 됩니다.

화면이 길어서 내려가야 할 때는 "J"를 눌러주시구요.

올라가야 할 때는 그 옆의 "K"를 눌러주시면 됩니다.

 

5. Git 히스토리(Commit 내역) 보기:  Log 

5-1. 히스토리 보기

터미널에서 Git 저장소의 히스토리(history)는 다음 명령어를 통해서 확인할 수 있습니다.

 

git log

 

다양한 옵션을 추가하면, 히스토리를 원하는 형식으로 볼 수 있는데요.

  • --all: 모든 기록을 보여주기
  • --oneline: 한줄로 줄여서 보여주기
  • --graph: 그래프로 보여주기

한번에 아래와 같이 사용할 수 있는데요.

한 줄로 히스토리를 줄이고, 그래프를 사용해주면 훨씬 이해하기가 쉬워집니다.

 

git log --all --oneline --graph

 

 

사용중 git bash화면으로 들어가게 된다면, q를 눌러서 나와주면 됩니다.

그래프로 나오는 화면에서 head가 현재 위치한 곳을 말 합니다.

 

5-2. 특정 커밋 검색하기

다음과 같이 하면 특정한 작성자가 작성한 커밋만 검색할 수 있습니다.

 

git log --author="작성자명"

 

특정기간에 이루어진 커밋만 검색할수도 있는데요.

아래와 같이 해 주면 됩니다.

git log --since="YYYY-MM-DD" --until="YYYY-MM-DD"

 

6.  Git 설치후 커밋까지 재정리

처음 git을 사용했을 때부터 커밋을 할 때까지의 과정을 다시한번 정리해 보겠습니다.

Git을 설치하고 username과 email 설정까지를 하였다면, 아래와 같은 과정을 거치게 되는데요.

 

  • 첫 프로젝트에서 git init = 초기화
  • 파일 생성
  • git add <파일>  = stage로 올리는 단계 = 커밋전단계로 올리는 단계
  • 여러 파일 생성 및 코드작성
  • 해당 파일들 git add <파일>
  • 하나의 작업단위 완성
  • git commit -m "커밋 메시지" = Repository에 정보 저장

 

7. Restore

restore는 다시 원래되로 회복한다는 의미인데요.

git에서 커밋을 하였다면 이전 커밋 으로 돌려주고,

커밋을 아직 안했다면 stage상태로 돌려주는 명령어가 restore 입니다.

 

7-1. Stage상태로 올린 파일을 되돌릴 때

커밋을 하지 않은 상태에서 하는 restore는 가장 깔끔하고 문제가 발생하지 않습니다.

"git add <파일명>" 만 한 상태일 텐데요.

아래 명령어로 쉽게 되돌릴 수 있습니다.

 

git restore --staged <파일명>

 

7-2. Commit 후 특정단계의 커밋으로 되돌릴 때

Commit을 해버리면 이전 커밋으로 되돌릴 수 있는데요.

이 때는 아래와 같은 형식을 이용해 주면 됩니다.

git restore <파일명>

 

만약 커밋의 특정 단계로 회복시키고자 할 경우도 있을 수 있습니다.

이럴 때 필요한 것이 커밋해쉬인데요.

이것은 커밋일련번호 같은 것인데,

아래이미지에서 commit로그의 왼쪽을 보면 커밋마다 나와있는 string이 보입니다.

예를 들면 "e4b534d" 이것인데요.

 

 

이 번호를 가지고 아래의 커밋 해쉬부분에 입력해 주면,

해당 커밋으로 파일을 돌려줍니다.

 

git restore --source <커밋해쉬> <파일명>

 

8. Revert 명령어 

Git을 이용하다가 기존 커밋이 문제가 생겨서 그 이전으로 돌아가고 싶을때가 생깁니다.

예를 들어, F에서 D로 이동하고 싶은 건데요.

이 때는 F에서 E에서 작업했던 것을 다시 revert하는 커밋을 하는 형태로 해야합니다.

 

말이 복잡한 것 같지만, F에서 D상태로 돌아가기 위해서는,

삭제는 불가능하구요.

E에서 작업했던것을 다시 D상태로 뒤돌리는 코딩을 해서 커밋을 해야하는데,

이것을 revert 명령어로 할 수 있다는 것 입니다.

 

 

명령어 사용방법은 다음과 같습니다.

취소할 E의 커밋해쉬를 확인해서 집어넣으면, D상태로 revert하는 새로운 커밋을 하게 됩니다.

 

참고로 Head는 현재브랜치를 가르키는 포인트인데요.

아래와 같이 "git revert HEAD"라고 입력하면 방금 커밋한 것을 revert 할 때 커밋해쉬 없이 할 수 있습니다.

 

git revert <취소할 커밋해쉬>

git revert HEAD (방금 커밋한 것을 revert 할 때 커밋해쉬없이 HEAD사용가능)

 

실행해보면 다음과 같은 화면을 보게 됩니다.

revert를 위한 커밋 코멘트를 여기서 수정할 수 있습니다.

 

그런데, 여기서 보는 화면은 사용하기 까다로운 vim에디터인데요.

"i"키를 누르면 "insert"모드로 들어가서 수정을 할 수 있는데요.

esc를 눌러서 일반모드로 나옵니다.

그리고 화면을 빠져나올때는 다음명령어를 입력해 주면 됩니다.

  • ":wq" 입력: 저장하고 종료 (":w"만 입력하면 저장만 됨) 
  • ":q" 입력: 종료
  • ":q!" 입력: 저장내용 버리고 강제종료

참고로 "h", "j", "k", "l" 키로 상하좌우로 이동할 수 있습니다.

 

 

":wq"로 커밋내용을 저장하고 나오면 다음과 같은 화면을 볼 수 있는데요.

 

 

gitlog를 보면 Revert 커밋이 반영된 것을 볼 수 있습니다.

 

 

9. Reset

reset은 깃에서도 모든 것을 다 버리고 돌아가버리는 강력한 명령어 인데요.

커밋된 것이 날아가버리기 때문에, 신중을 기해야하는 명령어 이기도 합니다.

 

9-1. 특정 커밋으로 완전히 되돌아가기

아래 명령어를 사용하면 커밋해쉬의 순간으로 완전히 되돌아가게 되는데요.

아무런 기록이 남지 않으므로 되돌릴 방법이 없으니, 신중을 기해서 사용해야만 합니다.

회사같은 곳에서는 거의 사용할 일이 없다고 봐야하겠지요.

 

git reset --hard <커밋해쉬>

 

위의 방법은 너무나 강력하니,

변경사항을 staging해놓고 되돌려 주는 옵션이 있는데요.

"--soft"가 바로 그것입니다.

되돌아가고 아무것도 안남는 것보다는 덜 위함한 옵션이지요.

 

git reset --soft <커밋해쉬>

 

 

9-2. Stage 단계에 올라간 내용 모두 삭제하기

reset명령어에 아무런 옵션이나 커밋해쉬를 붙이지 않으면,

Stage단계에 올라갔던 내용을 한번의 명령어로 내릴 수 있습니다.

아래 명령어를 입력하면 그동안 입력해서 stage에 올라갔던 내용이 모두 내려갑니다.

다만, 코딩햇던 내용들이 날아가지는 않습니다.

 

git reset

 

10. Branch 만들고 이동하기

Branch 자체에 관해서는 아래 글을 참조해 주세요.

SourceTree에서 Branch를 다루는 방법에 대한 글이지만, Branch를 이해하는데 도움이 됩니다.

>> SourceTree에서 Branch 생성과 병합(Merge) 그리고 충돌(Conflict) 해결 정리

 

Branch를 이용하면 앱을 만들면서 추가 기능을 작업할 때 특히 도움이 되는데요.

추가기능을 다른 Branch에서 만들면서도, 버그픽스같이 당장 커밋해야하는 작업을 동시에 병렬로 할 수 있기 때문이지요.

 

10-1. Branch 생성

먼저 다음 명령어로 Branch를 만들 수 있습니다.

브랜치명을 정할 때는 간결하면서도 작업을 잘 나타낼 수 있도록 해야하구요.

단어간 구분은 "-"이나 "_"을 붙여주는 것이 좋습니다.

 

git branch <브랜치명>

 

10-2. Branch 이동하기

만들고 나면, 아래와 같이 branch가 만들어 지는데요.

주의할 점은 이 branch로 이동을 해서 작업을 해야만 합니다.

이동할 때는 아래와 같이 switch 명령어를 사용해 줍니다.

 

git switch <이동할 branch 이름>

 

다시 main브랜치로 이동하고자 한다면,

"git switch master"이라고 해주면 됩니다.

(참고로 예전에는 "git checkout master" 와 같이 checkout 명령어를 사용했었는데요.

최근 이 checkout명령어를 대신하여, switch와 restore명령어가 생겼습니다.)

 

 

 

어느 브랜치에서 작업하고 있는지 잘 모를 때는 "git status"명령어가 도움이 되구요.

이동할 브랜치를 모를 때는,

git에 브랜치 목록을 조회하는 다음의 명령어를 입력해 주면 됩니다.

 

git branch (로컬 브랜치 목록)
git branch -r (원격 브랜치 목록)
git branch -a (모든 브랜치 목록)

 

10-3. Branch 이름 변경하기

만약 브랜치 이름을 바꾸고 싶다면, 아래와 같이 바꾸어주면 됩니다.

예를 들어서, super-party 브랜치의 이름을 nano-dance 로 바꾸고 싶다면,

"git branch -m super-party nano-dance" 로 해주면 됩니다.

 

git branch -m <기존브랜치명> <바꿀브랜치명>

 

참고로 메인브랜치의 이름을 바꿀 때는 다음과 같이 대문자 -M 을 써주면 됩니다.

 

git branch -M <메인브랜치 이름>

 

11. Branch 합치기

11-1. Merge (병합) 명령어 이용한 병합

만들었던 Branch에 개발이 끝나면, 이제 Master브랜치로 합쳐야 합니다.

이 때 반드시 주의해야 할 것은, 합쳐질 Master브랜치로 먼저 이동해놓아야 한다는 것 입니다.

Master브랜치에서 아래 명령어를 입력해 줍니다.

 

git merge <합칠 브랜치명>

 

 

11-2. Conflict 해결

아래와 같이 같은 파일에 대해서 Merge를 하다가 Conflict가 나는 경우가 있습니다.

오토매틱한 merge가 페일이 되었다는 설명이 나오구요.

 

 

Conflict가 난 파일로 이동하면 아래와 같이 표시가 되어 있는데요.

아래에서와 같이 화살표와"<<<", ">>>"와  "=====" 부분의 코드를 결정해서 정리해 주면 됩니다.

 

 

해결해주고 나서, add와 커밋을 해 주면 merge가 마무리 된 것입니다.

 

git log명령어를 실행해보니, 아래와 같이 해결된 것을 볼 수 있습니다.

 

 

merge가 끝났는데요. 

이러한 방식의 merge를 3way merge방식이라고 합니다.

이러한 방식 이외에도 아래와 같은 방식들이 있는데요.

간단히 보고만 가겠습니다.

 

11-3. Squash 옵션 사용하기

merge시에 아래와 같이 "--squash" 옵션을 사용해 줄 수 있는데요.

 

git merge <합칠 브랜치명> --squash

 

이렇게 하면, 위에서 보았던 것처럼, 복잡한 형태가 아니라,

합칠 브랜치 전체의 코드를 마치 새로 커밋한 것처럼 graph가 그려지게 됩니다.

원래는 A와 B가 git log에서 나와야 하는데, 나오지 않게 되는 것 이지요.

게다가 브랜치를 작업하면서 생긴 A커밋도 보이지 않게되어서,

간결하게 정리가 됩니다.

 

 

8-4. rebase 명령어 사용한 합병

rebase 라는 뜻은 base를 새롭게 다시 설립한다는 것인데요.

먼저 아래와 같은 이미지가 있다고 가정해 보겠습니다.

 

 

New Branch의 시작점을 아래와 같이 D에서 F로 밀어줍니다.

그러면 Master Branch는 아무 커밋도 없고, New Branch만 진행한 것이 되는데요.

이 상태에서 merge명령어로 병합을 하면,

실질적으로 New Branch가 Master Branch가 되게 됩니다.

 

이러한 방식은 Conflict도 많이 날수 있으므로 사용에 주의가 필요합니다.

 

rebase를 할 때 주의할 점이 있습니다.

merge를 할 때는 master branch로 switch해서 merge명령어를 해 주었는데요.

 

rebase명령어를 사용할 때는 

rebase를 할 branch로 switch해서 rebase 명령어를 이용해 주어야 합니다.

>> git rebase master

git rebase <Master브랜치명>

 

rebase가 완료된 후 merge를 하고자 한다면,

master브랜치로 이동한 후에,

merge명령어를 사용해야한다는 것을 잊으면 안되겠지요.

 

12. 브랜치 삭제

브랜치는 merge 하더라도 삭제되지 않습니다.

그래도 삭제하고 싶을때는 아래 명령어를 사용하면 되는데요.

merge가 된 것과 안된 것의 옵션명이 소문자와 대문자로 조금 다릅니다.

 

git branch -d <삭제할 브랜치명> (merge가 완료된 브랜치)
git branch -D <삭제할 브랜치명> (merge가 아직 안된 브랜치)

 

13. 외부 저장소에 Push하기

13-1. 원격저장소(Remote Repository) 생성하기

git을 이용하면 자신의 컴퓨터에서 버전관리를 할 수 있는데요.

이 때 자신의 컴퓨터를 로컬저장소(Local Repository)라고 합니다.

 

 

이것을 외부의 원격저장소(Remote Repository)에 보존하면,

데이터를 더욱 안전하게 보관할 수 있을 뿐만이 아니라,

다른 사람과의 협업도 가능하게 됩니다.

 

이렇게 외부의 원격저장소에 데이터를 보내는 것이 push 명령어의 역할입니다.

이렇게 git에 원격저장소를 제공하는 대표적인 곳들이,

github와 bitbucket 입니다.

둘 다 IT대기업이 인수하여서 운영중이므로, 

작은 기업에서 운영하는 것보다는 안정적이라고 할 수 있겠지요.

 

github에서 우측 프로필 아파타옆의 "+"버튼을 클릭하면 다음과 같은 화면이 나오는데요.

여기서 New repository를 눌러줍니다.

 

 

 

버튼을 누르고, Repository를 하나 생성해 줍니다.

Repository name을 설정해 주는데요.

보통은 소문자에, 단어간에는 "-"을 사용하는 것이 보통입니다.

이름을 정하고, Public으로 할지, Private으로 할지 정한 후에는,

하단의 Create repository 버튼을 눌러주면 됩니다.

 

 

생성을 해주면 아래와 같이 시작 가이드 화면이 나오는 것을 볼 수 있습니다.

2번째의 기존 리파지토에서 푸쉬하는 방법을 사용하게 되는데요.

github에서는 아래처럼, master브랜치의 이름을 main으로 바꾸고 push를 하라고 하고 있습니다.

잊으면 안되겠지요.

 

 

위에 나온대로 아래 명령어들을 순서대로 입력해 줍니다.

아래는 origin 에 외부 리파지토리 주소를 추가해 주는 명령어인데요.

앞으로 origin에 변수가 저장되므로, origin만 쓰면 따로 긴 주소는 적지 않아도 됩니다.

 

git remote add origin <외부 리파지토리 주소>

 

 

"git branch -M" 명령어는 위에서도 보았는데요.

master브랜치의 이름을 바꾸는 명령어입니다.

github는 main으로 master브랜치의 이름을 정하라고 하고 있네요.

 

git branch -M main

 

"git push origin main"이 원격저장소인 github에 파일을 올리는 명령어인데요.

여기에 아래와 같이"-u" 옵션을 붙이면 명령어를 기억해주게 됩니다.

그럼 앞으로는 "git push"만 해도 "git push origin main"과 같은 효과가 납니다.

 

git push origin main

git push -u origin main //앞으로는 git push만 하면 git push origin main으로 입력하는 것과 같음

git push // 위 명령어 입력후에는 git push만으로 사용가능

 

최초에 처음 실행하면 유저이름과 Password를 물어보는데요.

이 때 Password는 github의 패스워드가 아닙니다.

여기서 조금 머리가 아파지는데요.

과정이 조금 복잡합니다.

 

 

 

이렇게 발급받은 토큰을 password에 입력해주면 됩니다.

이러한 과정은 bitbucket에서도 거쳐야 하는데요.

 

성공하면 아래와 같이 성공적으로 데이터가 원격저장소인 github에 올라가는 것을 볼 수 있습니다.

 

 

추가적으로 특정한 Branch에 push를 하려면 어떻게 해야할까요?

이 때는 아래와 같이 해 주면 됩니다.

 

git push origin <브랜치이름>

 

14. 외부저장소에서 pull (가져오기) 

14-1. 다른 컴퓨터에서 pull 하기 전 데이터 복사하기

다른 컴퓨터에서 프로젝트 폴더를 만들고, 

아래 주소를 입력하면 외부저장소에서 파일을 가져올 수 있습니다.

 

git clone <외부저장소 주소>

 

 

만약 같은 사람이 아니고,

다른 사람이 github아이디로 이용하고자 한다면,

Repository를 생성한 유저가 Collaborators로 등록을 해줘야 합니다.

현재는 아래와 같이 아무도 초대가 안되어 있는데요.

우측 하단에서 "Add people"을 클릭해줍니다.

 

 

14-2. pull

이제 본격적으로 데이터를 pull해오도록 하겠습니다.

아래 명령어를 실행해주면 됩니다.

 

git pull

git pull <브랜치명> // 가져올려고 하는 브랜치만 pull 할 때

 

실행해보면 다음과 같이 데이터를 가져오는 것을 볼 수 있습니다.

 

14-3. push 전 항상 pull

git push를 하기전 주의할 것은,

항상 버전상태가 최신이어야 한다는 것 입니다.

그래서 push전 pull해서 받을 것이 있을 때는 push가 동작하지 않고 아래와 같이 에러가 납니다.

 

 

위와 같은 경우, git pull을 해서 자료를 받아서 다시 push를 하면 문제가 없습니다.

 

15. Stash

Stash는 작업하던 코드를 commit하지 않고 잠시 특정한 곳에 저장하는 것인데요.

 

뭔가를 작업하고 있었는데,

기능이 완성되지도 않았고, 정말 애매한 상황에 빠져 있을 수 있습니다.

이럴 때, 어떻게 하면 좋을까요?

기존에 브랜치를 따서 작업했다면 더욱 좋았겠지만, 그러지 않았을때는 정말 난감합니다.

이 때 도움이 될 수 있는 것이 바로 이 Stash 인데요.

이 코드들을 commit하지 않고도 특정한 곳에 저장이 가능합니다.

저장기준은 가장 최근 커밋으로부터 변경된 내용들입니다.

 

stash를 사용하는 명령어는 다음과 같은데요.

그냥 stash만 넣어도 저장이 되구요.

아래와 같이 save 추가하면, 어떤 내용인지에 대해서 적어서 저장할 수 있습니다.

 

git stash

git stash save <stash내용>

 

그럼 아래와 같이 화면에 저장되었다는 문구가 나오는 것을 볼 수 있습니다.

 

 

이렇게 저장해 놓은 것은 아래 명령어로 조회해볼 수 있는데요.

 

git stash list

 

그럼 아래와 같이 내용이 나옵니다.

 

 

마지막으로 stash의 내용을 다시 불러올 수 있어야 하는데요.

그러기 위해서 다음 명령어를 사용해 줍니다.

가장 최근 것을 불러올 때 사용하면 됩니다.

 

git stash pop

 

stash를 지우고자 할때는 아래 명령어를 사용해주면 되는데요.

특정 stash를 삭제할 때는 drop을,

전부삭제할 때는 clear를 사용해주면 됩니다.

 

 

git stash drop // 가장 최근의 stash를 제거

git stash drop <stash name>

git stash clear // 전부삭제할 때

 

15. 초기화된 Git저장소 위치 찾아서 Pull하기

15-1. Git 저장소 위치 찾기

오래된 프로젝트의 경우,

리눅스 서버에서,

프로젝트의 어느 위치에서 Git이 초기화되어있는지 알기 어려울 경우가 있습니다.

물론, 프로젝트 폴더의 루트에 있는 경우가 많지만,

그렇지 않은 경우도 많이 있기 때문입니다.

 

다음 명령어를 통해서 Git의 위치를 찾고,

pull을 해 줄 수 있습니다.

 

sudo find / -name ".git"

 

위에 사용된, '/'은 '/' 디렉토리부터 시작해서,

이름이 .git인 모든 파일을 찾습니다.

 

만약, root권한이 아니라면, 아래 명령어를 사용해 주면 됩니다.

'2>/dev/null'은 권한이 없어 접근할 수 없는 디렉토리에서 발생하는 에러 메시지를 숨겨줍니다.

 

find / -name ".git" 2>/dev/null

 

15-2. 외부 저장소 찾기

외부 저장소도 기억이 나지 않을 수 있습니다.

물론, 이것은 Git에 로그인해서, 해당 프로젝트의 주소를 찾아보면 될 일이기는 하지만,

아래 명령어로도 쉽게 알아낼 수 있습니다.

 

git remote -v

 

 

이제 아래 명령어로 외부저장소에서 파일을 pull하기만 하면 됩니다.

 

git pull <원격저장소 주소>

 

 

이상으로 git에 대해서 정리해 보았습니다.

728x90