오늘은 Git을 사용하는 방법에 대해서 총정리해 보도록 하겠습니다.
이 글은 Git을 Source Tree 같은 그래픽 버전관리프로그램의 도움 없이도,
기본적인 기능들을 다룰 수 있도록 하는 것을 목표로 작성하였습니다.
- Git설치
- Git 최초 설정
- 프로젝트별로 버전관리 시작하기
- Git에 파일 add 하기
- Git 히스토리(Commit 내역) 보기: Log
- Git 설치 후 커밋까지 재정리
- Restore(직전 커밋으로 되돌리기)와 Clean
- Revert 명령어 (이전 특정 커밋으로 돌아가기)
- Reset 명령어
- Branch 만들고 이동하기
- Branch 합치기
- 브랜치 삭제
- 외부 저장소에 Push 하기
- 외부저장소에서 pull (가져오기)
- Stash
- 초기화된 Git저장소 위치 찾아서 Pull 하기
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 단계에 올리기
다음과 같이,
add명령어를 이용해 주면,
특정파일을 stage에 올릴 수 있습니다.
"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
최근 몇 개의 커밋만 볼 수도 있는데요.
예를 들어, 최근 5개의 커밋만 보고자 한다면,
다음과 같이 해주면 됩니다.
git log -n 5 # 최근 5개의 커밋만
사용 중 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와 Clean
7-1. Restore 명령어로 수정된 파일을 마지막 커밋 상태로 되돌리기
만지면 안 될 파일을 만지다 뒤늦게 깨달았지만,
stage상태로 올리지 않았을 때는,
아래와 같은 명령어를 사용해서 쉽게 뒤로 돌릴 수 있습니다.
git restore <파일명>
변경한 파일 전체를 수정하고자 한다면 아래와 같이 해주면 됩니다.
git restore .
그런데, restore명령어를 사용할 때,
한 가지 알아두어야 할 점이 있습니다.
이 명령어는 기존에 추적하고 있던(tracked file) 파일에 대해서만,
기존 커밋된 상태로 돌려줍니다.
그럼 새로 생성해 버린 파일이 있을 경우에는 요?
그건 아래에서 볼 clean 명령어가 도와줍니다.
7-2. clean 명령어로 새로 생성한 파일을 제거하기
추적되지 않은 새로 생성한 파일을 제거하려면,
restore가 아니라,
clean명령어를 사용해 주어야 합니다.
git clean 명령어는 다음의 옵션들을 사용할 수 있습니다.
- -f: 파일 강제삭제
- -fd: 파일과 디렉토리까지 강제삭제
- -n: 삭제할 파일 미리 보기
- -fx: gitignore에 있는 파일도 함께 삭제
- -i: 대화형 모드로 실행하여 삭제할 파일을 선택할 수 있습니다
생성한 모든 파일을 제거하려고 마음먹었다면,
아래 명령어 한 번이면 됩니다.
git clean -fd
만약, 기존의 추적되고 있는 파일도 되돌리고,
새로 만든 파일도 다 없애서,
완전히 이전 커밋상태로 되돌아가려면,
아래의 2개의 명령어를 실행해 주면 되겠지요.
git restore .
git clean -fd
광고
7-1. Stage상태로 올린 파일을 되돌릴 때
커밋을 하지 않은 상태에서 하는 restore는 가장 깔끔하고 문제가 발생하지 않습니다.
"git add <파일명>"만 한 상태일 텐데요.
아래 명령어로 쉽게 되돌릴 수 있습니다.
git restore --staged <파일명>
7-2. Commit 후 특정단계의 커밋으로 되돌릴 때
Commit을 해버리면 이전 커밋으로 되돌릴 수 있는데요.
이 때는 아래와 같은 형식을 이용해 주면 됩니다.
git restore <파일명>
만약 커밋의 특정 단계로 회복시키고자 할 경우도 있을 수 있습니다.
이럴 때 필요한 것이 커밋해쉬인데요.
이것은 커밋일련번호 같은 것인데,
아래이미지에서 commit로그의 왼쪽을 보면 커밋마다 나와있는 string이 보입니다.
예를 들면 "e4 b534 d" 이것인데요.
이 번호를 가지고 아래의 커밋 해쉬 부분에 입력해 주면,
해당 커밋으로 파일을 돌려줍니다.
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에 올라갔던 내용이 모두,
working directory로(Stage전단계) 내려갑니다.
따라서, "git restore --staged. "와 유사한 효과를 준다고 할 수 있습니다.
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커밋도 보이지 않게 되어서,
간결하게 정리가 됩니다.
11-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번째로 나온,
기존 리파지토리에서 푸시하는 방법을 사용하게 되는데요.
master브랜치의 이름을 main으로 바꾸고 push를 하라고 하고 있습니다.
(권장사항이어서, master로 그대로 놓아두고 한다고 문제가 되지는 않습니다.)
위에 나온 대로 아래 명령어들을 순서대로 입력해 보겠습니다.
13-2. 원격 저장소 등록하기
아래는 origin이라는 이름으로,
외부의 리파지토리 주소를 추가해 주는 명령어인데요.
원하면, 다른이름으로 정해도 됩니다.
이렇게 하면, origin이라는 이름에 원격저장소의 주소가 저장되어,
긴 주소를 적지 않아도 됩니다.
git remote add origin <외부 리파지토리 주소>
13-3. 브랜치 이름 설정하기
브랜치 이름을 설정하는 단계는 권장사항으로서,
꼭 하지 않아도 사용하는데 문제가 생기지는 않습니다.
아래로 그냥 내려가시면, 메인 브랜치명은 'master'로 남게 됩니다.
"git branch -M" 명령어는 위에서도 본 것처럼,
master브랜치의 이름을 바꾸는 명령어입니다.
github는 main으로 master브랜치의 이름을 정하라고 하고 있네요.
git branch -M main
13-4. 원격저장소에 push하기
아래 명령어를 사용하면,
원격저장소에 파일을 올리게 됩니다.
origin은 위에서 원격저장소의 주소를 저장해 놓은 이름입니다.
git push origin <브랜치 명>
위에서 main으로 메인브랜치 이름을 정했다면,
아래와 같이 되겠지요.
(main으로 바꾸지 않은 사람들은, "git push origin master"가 되겠네요.)
git push origin main
13-5. -u 옵션으로 명령어 단순화하기
git push는 상당히 자주 사용하는 명령어인데요.
아래와 같이"-u" 옵션을 붙이면,
git이 어떤 원격 저장소(remote)와 어떤 브랜치로,
push할지를 추적하여 기억하게 됩니다.
git push -u origin main
이렇게 함으로써,
앞으로는 push를 할 때,
아래와 같이 단순한 명령어를 사용할 수 있습니다.
git push
이 뿐만이 아니라, pull할 때도,
이제는 아래와 같이 심플하게 명령할 수 있습니다.
git pull
13-6. password
최초에 처음 실행하면 유저이름과 Password를 물어보는데요.
이때 Password는 github의 패스워드가 아닙니다.
여기서 조금 머리가 아파지는데요.
과정이 조금 복잡합니다.
이에 관련해서는 아래 글을 참조해 주세요.
>> Github 에서 발급하는 Personal Access Token
이렇게 발급받은 토큰을 password에 입력해 주면 됩니다.
이러한 과정은 bitbucket에서도 거쳐야 합니다.
성공하면 아래와 같이 성공적으로 데이터가 원격저장소인 github에 올라가는 것을 볼 수 있습니다.
13-7. 다른 브랜치에 push 하기
특정한 다른 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 // 전부삭제할 때
16. 초기화된 Git저장소 위치 찾아서 Pull 하기
16-1. Git 저장소 위치 찾기
오래된 프로젝트의 경우,
리눅스 서버에서,
프로젝트의 어느 위치에서 Git이 초기화되어 있는지 알기 어려울 경우가 있습니다.
물론, 프로젝트 폴더의 루트에 있는 경우가 많지만,
그렇지 않은 경우도 많이 있기 때문입니다.
다음 명령어를 통해서 Git의 위치를 찾고,
pull을 해 줄 수 있습니다.
sudo find / -name ".git"
위에 사용된, '/'은 '/' 디렉터리부터 시작해서,
이름이. git인 모든 파일을 찾습니다.
만약, root권한이 아니라면, 아래 명령어를 사용해 주면 됩니다.
'2>/dev/null'은 권한이 없어 접근할 수 없는 디렉터리에서 발생하는 에러 메시지를 숨겨줍니다.
find / -name ".git" 2>/dev/null
16-2. 외부 저장소 찾기
외부 저장소도 기억이 나지 않을 수 있습니다.
물론, 이것은 Git에 로그인해서, 해당 프로젝트의 주소를 찾아보면 될 일이기는 하지만,
아래 명령어로도 쉽게 알아낼 수 있습니다.
git remote -v
이제 아래 명령어로 외부저장소에서 파일을 pull 하기만 하면 됩니다.
git pull <원격저장소 주소>
이상으로 git에 대해서 정리해 보았습니다.
'Git, BitBucket, SourceTree' 카테고리의 다른 글
Git 커밋 메시지 간결하게 작성하는 방법 정리 (0) | 2025.01.17 |
---|---|
Mac 키체인 Access 토큰 비밀번호 업데이트 # Github Bitbucket KeyChain (0) | 2022.10.15 |
Github 에서 발급하는 Personal Access Token (0) | 2022.10.13 |
Bitbucket App Passwords 이슈 해결 # Account Sourcetree (0) | 2022.09.18 |
Reverse Commit SourceTree 에서 되돌리는 Git (0) | 2021.04.23 |
기존 프로젝트를 Bitbucket과 SourceTree로 올려보자 (0) | 2020.10.17 |
Git 명령어 중 자주 사용하는 것들 모음 (0) | 2020.04.10 |
SourceTree에서 Branch 생성과 병합(Merge) 그리고 충돌(Conflict) 해결 정리 (1) | 2018.09.17 |
git-quick-stats 로 보는 다양한 Git 통계 (0) | 2017.04.05 |
SourceTree 에서 수정하는 gitignore (0) | 2017.04.03 |
댓글