Git, BitBucket, SourceTree

Git 명령어 중 자주 사용하는 것들 모음

Developer88 2020. 4. 10. 10:59
반응형

sourceTree같은 GUI프로그램만 사용하다 보면, 명령어가 가물가물 해지는데요.

오늘은 터미널에서 자주 사용하는 git명령어들에 대해 정리해 보도록 하겠습니다.

 

 

1. Git의 기본 명령어

Git을 사용할 때 git init과 같은 가장 기본적으로 사용하게 되는 명령어들을

먼저 정리해 보도록 하겠습니다.

 

1-1. git저장소 설정

git init명령어를 통해서,

.git이라고 하는, git저장소 디렉토리를 생성해 줍니다.

프로젝트를 git으로 관리하고자 할 때, 가장 먼저 사용하는 명령어가 되겠지요.

git init

 

프로젝트의 디렉토리에서 git init을 실행하면, 아래와 같이 Initilialize되었다는 문구를 보게 됩니다.

 

1-2. User이름과 이메일 설정하기

git에 유저의 이름과 이메일을 남겨줍니다.

설정되어있지 않을 경우, 한번만 해주면 됩니다.

git config --global user.name <유저이름>
git config --global user.email <유저이메일>

 

1-3. 로그보기

로그를 보는 명령어는 git log인데요.

git log

 

-p 를 추가하면 수정 내역을 볼 수 있구요

-3 과 같이 숫자를 추가해 주면, 보고자 하는 커밋의 줄 수를 선택할 수 있습니다.

예를 들어 3줄만 보고자 할 때, -3을 붙이면 되는거죠.

또한, git log <commit id>를 해주면, 해당 커밋의 이전 내역만 보여줍니다.

git log -p

 

 

1-4. Add 와 Reset

Commit의 대상이 되도록,

스테이지에 Add 한다(혹은 스테이지에 올린다)는 의미인데요.

 

test.txt를 커밋하려고 한다면,

먼저 git add test.txt와 같이 스테이지에 올려준다음, 커밋 명령어를 입력해 주어야 겟지요.

 

보통 프로젝트를 처음 시작할 때 프로젝트 디렉토리의 기본적인 파일과 디렉토리들을 Commit의 대상이 되도록 하기 위해서,

"git add."을 써서 처음 파일들을 모두 올려서 initial commit을 할 준비를 하지요.

 

git add <파일명>

 

 

또한 위와 같이 add명령어로 Stage에 올린 파일들을 다시 Stage에서 내리기 위해서,

Reset명령어를 이용할 수 있습니다.

아래 명령어를 입력하면, 기존에 add되어 있던 파일들이 모두 Stage에서 내려갑니다.

git reset

 

 

1-5. Diff

바로 이전 커밋과 현재의 차이점을 보여줍니다.

최종 커밋을 하기전에 보면 좋습니다.

git diff

 

아래 명령어를 사용하면, commit들 중 비교할 commit들의 변경된 내역을 보여줍니다.

git diff <비교할 commit id> <비교할 commit id>

 

1-6. Status

추적되고 있지 않은 파일을 보여줍니다.

git status

 

add명령어를 통해, 스테이지에 올라가지 않은 파일은 빨간색으로 보입니다.

add를 통해 스테이지에 올라가게 되었을 때, 녹색으로 보여집니다.

 

 

1-7. Discard Changes

add명령어를 통해서 commit의 되상이 되는 스테이지 상태로 올라가지 않는 파일의 변경내용을 취소하고,

이전 상태로 돌려줍니다.

예를 들어서, test.txt 파일을 작업했다가, add를 하지 않은 상태에서,

그냥 예전으로 돌아가 버리려면,

git checkout -- test.txt 라고 명령어를 입력해 주면 됩니다.

그럼 가장 최근에 Commit된 버전으로 돌아가게 됩니다.

git checkout <파일명 혹은 디렉토리명>

 

참고로 add 하지 않은 모든 내용을 다 날려버리고자 한다면,

"git checkout ."을 해 주면 되겠지요.

하지만 commit되지 않는 기록은 복원할 수 없으므로,

반드시 한번 더 고민해보고 사용해야 겠습니다.

 

 

2. Commit 

 

add 명령어를 통해서,

Commit의 대상이 되는 스테이지 영역에 올라가 있는 파일이 있다면,

이제 커밋을 해야하는데요.

 

git commit만 입력하면, vim화면이 나오는데요.

vim에 들어가서, i를 눌러서 모드도 변경하고, :wq눌러서 저장하는 것도 번거롭기 때문에,

-m옵션을 사용하는 것이 편합니다.

 

-m 은 커밋메시지를 넣을 때 쓰는 옵션이구요. 여러줄을 쓸때는 여러번 사용해주면 됩니다.

-a 는 스테이지에 올리는 작업과 커밋을 동시에 할 수 있습니다. 

즉, add를 할 필요없이 바로 커밋하고자 할 때 사용하면 됩니다.

git commit -m <커밋메세지> 
git commit -am <커밋메세지>

 

커밋한 내용 수정하기

아래의 명령어로 해당 commit을 수정할 수 있습니다.

git commit --amend

 

 

3. Clone과 그리고 Pull 와 Push 및 원격저장소 Add

 

3-1.원격저장소 clone하기

원격저장소의 주소는 github이나 bitbucket같은 서비스가 될 수 있을텐데요.

프로젝트를 만들고 나면, 이들 사이트에서 원격저장소의 주소를 알려주는데요.

 

보통 https로 시작하는 이 주소를 첫번째로 넣어주고, 두번째에는 저장할 디렉토리를 넣어줍니다.

현재 디렉토리에 저장하고자 한다면, 두번째는 입력할 필요가 없습니다.

git clone <원격저장소 주소> <가져와서 저장할 디렉토리>

 

예를 들어, AWS같은 곳에서 복사하고자 한다면,

home디렉토리로 이동한다음, "gitclone <원격저장소 주소>"를 입력해 주고 난 다음,

해당 디렉토리로 가서 작업을 해 주면 되겠지요.

 

3-2. pull하기

언제나 무슨 작업이든 항상 push전에 pull을 자주해주고,

충돌나지 않도록 확인하는 습관이 필요하겠지요.

간단한 명령어지만 매우 중요하도고 할 수 있습니다.

git pull

 

3-3. push하기

작업한 내용을 올리도록 하는 명령어인 push입니다.

git push

 

3-4. 원격저장소 Add하기

작업을 하는 방식에 따라서 로컬에서 git을 만들고 나서,

Github과 괕은 원격 Repository사이트에서 프로젝트를 만들게 되는데요.

(가볍게 자기 컴퓨터에서만 만들어보다가, 원격으로 만들어서 공유하고 협업해 나가려고 할 때가 보통 그렇지요)

 

이 때는 이미 로컬에서 사용하고 있는 git에서,

원격저장소를 추가해 주어야 합니다.

이 때 사용하는 것이 바로 git remote add 명령어 인데요.

 

아래와 같이 명령어 다음에 github Repository이름과 주소를 순차적으로 적어주면 됩니다.

git remote add <Remote Repository이름> <Remote Repository 주소>
예> git remote add origin https://github.com/user/repo.git

 

 

4. repository의 파일 삭제

 

원하지 않게 git에 필요하지 않은 파일이 들어갈 경우가 있습니다.

특히 .gitingore파일의 설정을 하기 전에 커밋을 해버린 파일의 경우가 그런데요.

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

 

4-1. git에서만 삭제하기

로컬과 git모두에서 삭제를 해 줄려면 아래와 같이 rm명령어를 --cached 를 붙여서 사용해 주면 됩니다.

git rm --cached deletethis.imi
git commit -m "Delete Unneeded File"

 

디렉토리를 삭제할 때는 -r 을 붙여주면 되구요.

git rm -r --cached .idea
git commit -m "Delete Unneeded Directory"

 

참고로 git과 로컬 모두에서 삭제하려면, 로컬에서 삭제해서 커밋하기만 하면 되겠지요.

repository내에서 현재 추적하고 있지 않은 파일을 알고 싶으면 아래 명령어로 확인할 수 있습니다.

git status --ignored

 

실행하면 아래와 같이 현재 Ignored된 파일을 볼 수 있습니다.

 

 

5. Branch 명령어

 

필요에 의해서 작업을 분기하거나 합쳐야 할텐데요. 

그 명령어들은 다음과 같습니다.

 

5-1현재 Branch를 확인하기

 

현재 브랜치를 확인하기 위해서는 아래 명령어를 사용해 주면 되는데요.

git branch

 

아래와 같이 현재 브랜치를 볼 수 있구요.

*(Asterisk)가 표현된 곳이, 현재의 브랜치 입니다.

 

 

5-2새로운 Branch를 생성하기

아래 명령어를 이용해서 Branch를 생성할 수 있는데요.

참고로, Branch를 생성하면 master branch와 같은 상태의 Branch가 생성이 됩니다.

(사실 너무나 당연한 것 인데요. branch만들어서 처음부터 다 생성하는 것을 원하는 사람은 없겠지요)

git branch <생성할 브랜치명>

 

5-3다른 Branch로 들어가기

 

다른 Branch로 들어가기 위해서는, 

현재의 branch에서 checkout하고 원하는 브랜치로 들어가면 되는데요.

그래서 명령어도 checkout입니다.

git checkout <들어가고자 하는 브랜치명>

 

git checkout testbranch를 해주면 아래와 같이 변경되는 것을 볼 수 있습니다.

testbranch로 들어갔다는 것이구요.

 

 

브랜치를 생성해서 해당 브랜치로, 바로 들어가고자 한다면,

아래와 같이 checkout명령어에 -b옵션을 주기만 하면 됩니다.

git checkout -b <생성할 브랜치명>

 

5-4Branch Merge하기(병합)

만약 testbranch에서 master브랜치로 Merge하고자 한다면,

먼저, master브랜치에 있어야 하구요(git checkout master)

git merge testbranch를 해주면 됩니다.

git checkout master
git merge <병합할 branch명>

 

 

이 부분은 매우 중요한 것으로,

항상 병합 목적지의 branch에서 merge명령어를 해 주어야 합니다.

(merge되어지는 대상에서 merge하는 것이 아니라는 것 이지요)

다시 예를 들면, B에서 A로 병합하고자 한다면,

B에서 checkout해서 A 브랜치로 돌아가서 merge명령어를 해 주어야 하는 것 이지요.

 

명령어를 실행하면, 커밋메세지를 입력할 수 있는 에디터가 열리는 데요.

메세지를 적고 저장해 주면 됩니다.

 

이제 아래와 같이 병합된 것을 볼 수 있습니다.

 

 

5-5Branch Conflict(충돌)

대부분 merge는 잘 동작하지만,

아래와 같이, merging이 conflict이 날 경우가 있는데요.

 

 

git status를 해보면, 아래와 같이 나옵니다.

 

 

conflict.txt를 편집해서 <<<<<과  ====, >>>> 부분들을 직접 수정해 줘야하는데요.

편집기를 열어서 수정해 줍니다.

 

 

아래와 같이 수정을 해 주었습니다.

 

이제 해결되었다고 commit을 해 주어야 할 텐데요.

수정된 파일을 add해 주고요.

git commit을 해 줍니다.

git add conflict.txt
git commit 

 

커밋을 하면 아래와 같이 편집기에 머지 컨플릭트를 수정한 것으로 나오구요.

:wq를 하고 나와주면 정상적으로 해결된 것을 볼 수 있습니다.

 

 

5-6Branch 삭제

-d옵션을 주면 branch를 삭제할 수 있습니다.
merge되지 않은 경우, 
-D를 옵션을 주면 강제로 삭제할 수 있습니다.
git branch -d <삭제할 브랜치 명>
git branch -d <삭제할 브랜치 명>​
 

5-7. 저장소의 모든 branch를 다 보기

git log --branches  --decorate --graph

git log --branches  --decorate --graph

 

아래와 같이 master브랜치와 testbranch가

빨간색과 녹색으로 구분되어서 보여집니다.

sourceTree같은 수준의 graph는 아니지만, --graph옵션으로 왼쪽에 구분되어진 branch의 선을 볼 수 있습니다.

 

 

--oneline 이라는 옵션을 붙이면 훨씬 더 보기가 쉬워지는데요.

git log --branches  --decorate --graph --oneline

 

실행하면 아래와 같은 화면을 볼 수 있습니다. 위의 결과 보다, 훨씬 간결하고 알아보기가 쉽습니다.

 

 

6. 정리

이상으로 자주쓰는 git 명령어에 대해서 정리해 보았는데요.

많이 쓰이는 명령어에 대해서,

"git --help"명령어를 입력하면 명령어들과 간단한 설명을 보여주므로,

사용하다가 잘 생각이 않날때는 참조해 볼 수 있을 것 같습니다.

 

 

참고로 git의 공식사이트의 Manual은 아래사이트의 링크로 가서 확인할 수 있구요.

https://git-scm.com/book/ko/v2

 

이 글과 관련하여 더 좋은 내용이 있다면, 해당 글에서 업데이트 하도록 하겠습니다.

728x90