본문 바로가기

Tech. Post/개발 환경 설정

Git Bash, 똑똑한 Git 사용하기 [기본편]

*평소 Git의 GUI툴 SourceTree를 사용하다가 가끔씩 불편한 점이 있어서, 대외활동을 회상해보며 Linux shell에서 Git Bash를 활용한 Git 사용법에 대해 정리해보겠습니다.

 

Git에서의 Local Directory 이해하기

워킹 디렉터리에서 변경한 내용을 'git add' 명령어로 준비영역(staging area)로 옮긴다.

만약, 준비영역에 있는 내용을 다시 워킹 디렉터리로 가져오려면 'git rm --cached FILE_NAME' 명령어를 쓰면된다.

준비영역에 옮긴 파일을 로컬 저장소에 저장하려면 'git commit' 명령어를 쓰면된다.

 

Working Directory

- untracked : 로컬 저장소의 git을 초기화하거나, 파일을 새로 만들면 (또는 처음 저장소를 clone하면) untracked상태이다.

- tracked (unmodified/modified) : checkout된 이후 수정 사항이 있지만 stage되지 않으면 modified된 상태이다.

      -> modified된 파일만 staging area로 옮겨갈 수 있다. 

  *file을 'git add'하게되면 tracking을 시작한다. 

 

Staging Area

- tracked & staged 상태이다.

- 'git rm --cached'를 이용해 unstage(staging area -> working directory) 가능하다.

- 'git diff --cached'는 index와 HEAD의 차이점을 비교해준다.

 

Repository

- 'git commit'으로 staging area에 있는 파일들이 하나의 버전으로 git directory에 저장된다.

- commit 이후 파일 상태가 staged -> unmodified로 변경된다.


Linux shell basic command | 기본적인 리눅스 셸 명령어

cat : 파일의 내용 보기

cat test.txt

ls (또는 dir) : 목록 보기

ls yoncho/home

*yoncho/home 하위에 있는 목록들이 출력된다.

더보기

ls 옵션

ls -t : 시간 순으로 나열하기

ls -S : 크기 순으로 나열하기

ls -F : 파일과 디렉터리 구분 (디렉터리 뒤에 '/'가 붙고, 파일 뒤에 '*'가 붙어서 표시됨)

ls -a : 숨긴 파일 보기

ls -l : 상세 보기 

ls -al : 숨긴 파일 상세 보기

mkdir : 디렉터리 생성

mkdir yoncho/home/testDir

cd : 디렉터리로 이동

cd yoncho/home/testDir

touch : 파일생성

touch autocrypt.txt

rm : 파일 삭제 

rm autocrypt.txt
더보기

rm 옵션

-f : 강제로 파일이나 디렉터리 삭제

-i : 매번 삭제할 때마다 사용자에게 질문 (삭제하시겠습니까 y/n?)

-r : 하위 디렉터리를 포함하여 모든 내용 삭제 (디렉터리를 삭제할 시 필요한 옵션)

-d : 빈 디렉터리만 제거

-v : 지워지는 파일의 정보 출력

 


Shell에 Git 환경 설정

Git Config | 사용자 정보 설정

// git commit에 사용될 username
git config --global user.name "yoncho"
 
// git commit에 사용될 email
git config --global user.email "yoncho@autocrypt.io"
 
// 설정한 내용을 확인할 수 있다.
git config --list

*git에서 사용할 사용자 이름과 사용자의 이메일을 설정한다. 

 

Git Init | 로컬 저장소 지정

// 로컬저장소로 설정할 프로젝트 혹은 원하는 파일 위치로 이동한다.
cd C:/Users/yoncho/autocrypt
 
// 로컬저장소로 설정한다.
// (master) 브랜치로 보이면 성공한 것이다.
git init
 
// 만약 init을 취소하려면 아래의 명령어를 입력한다.
rm -r .git

*로컬 저장소에 저장된 프로젝트는 해당 디렉터리에서 git명령어를 수행할 수 있다.

 

Git Clone | 저장소 복제

//기본적으로 git clone 통해 저장소를 clone할 시, 원격저장소 이름은 'origin'이다.
git clone '원격저장소 주소'

 

Git Status | 로컬 저장소 상태 확인

yoncho@autocrypt.io /c/Users/yoncho/autocrypt (master)
$ git status
On branch master

No commits yet

..
//commit이 있다면 commit 내역들이 출력이된다.

*상태확인으로 commit한 내역들과 commit은 했지만 push가 안된 내역들을 확인할 수 있다.

 

Git Remote | 원격 저장소 관리

//사용할 원격 저장소 이름은 대부분 origin으로 기본 설정하고, 뒤에 연결할 원격저장소 주소입니다.
// git remote add '사용할 원격 저장소 이름' '연결할 github 원격저장소 주소'

git remote add origin https://github.com/autocrypt/*****

// 연결된 원격저장소 확인
git remote -v

*로컬저장소에서 원격 저장소에 add와 commit, push를 하고싶다면 git remote 명령어를 사용해야한다.

 

Git Add | 파일을 준비영역(staging area)로 옮기기 *파일을 tracking 하기위함.

// 파일만 추가 (워킹 디렉터리 -> 준비영역)
git add fuzzing.cs

// 워킹 디렉터리 내 모든 파일 추가 (워킹 디렉터리 -> 준비영역)
git add .

// 명령 프롬프트에서 상호작용 병행하며 추가
git add -i 
//나갈땐 q 입력

// 진행중인 파일의 경우, 준비영역에서 워킹 디렉터리로 옮겨오기 (준비영역 -> 워킹 디렉터리)
git rm --cached fuzzing.cs
git rm -r --cached .

 

Git Commit | 준비영역(staging area) 파일을 로컬 저장소에 저장

// 커밋 메시지 에디터가 출력되고, 에디터에서 커밋 메시지 입력 후 저장하면 커밋됨
git commit
 
// 커밋 메시지를 입력후 커밋
git commit -m "커밋 메시지"
 
// Staging Area에 들어간 파일에 대해서만 (워킹 디렉터리는 적용 X)
git commit -a -m "커밋 메시지"

 

Git Push | 원격저장소에 저장

// 원격저장소에 저장한다.
// 기본 사용법
// git pus <저장소명> <브랜치명>
git push origin master
 
// git push를 할 때, 매번 <저장소> <브랜치명>을 입력하기 귀찮고, 한번만 입력하고싶으면
git push -u origin master

// 에러 : [rejected] master -> master (fetch first)
// 이미 변경된 파일이 원격저장소에 있을경우 발생
git pull origin master 
 
// 에러 : [rejected] master -> master (non-fast-forward)
git push origin +master

 

Git Diff | 변경점 확인

//현재 브랜치와 마지막 커밋과 차이점 비교
git diff

//특정 커밋과의 차이점 비교
git diff <Commit ID>

//특정 커밋과 특정 파일의 차이점 비교
git diff <Commit Id> -- <파일경로>

 

Git Branch | 브랜치 생성, 수정, 삭제

// 브랜치 목록 보기
git branch

// 브랜치 생성
git branch [브랜치명]

// 브랜치 이름 변경
git branch -m [브랜치명] [바꿀이름]

// 브랜치 삭제
git branch -d [브랜치명]

// 생성한 브랜치로 활성화하기
git checkout [생성한 브랜치명]

 

Git Merge | 병합

// 병합할 브랜치로 체크아웃
git checkout master

// develop 브랜치를 master로 병합
git merge develop

//만약, 같은 파일의 같은 위치의 내용이 변경될 경우 충돌남.

 


Git Post를 정리하며

Linux환경에서 C과제 개발 대외활동을 하면서, Git Bash와 동일한 CLI 환경에서 git작업을 했었다.

회사에 입사하고 나서 Git GUI 툴 (SourceTree)를 사용하면서 확실히 CLI보단 버튼 몇번 클릭으로 push, pull, fetch, commit, checkout등 편리하게 쓸 수 있었다. 편리함과 동시에 불편함 또한 있다. 가끔 먹통이 되거나 일부 작업을 할 때에는 git bash를 이용해서 commit 확인이나 되돌리기 등을 해야할 때도 있다. 그럴때 기본적인 git command를 모른다면 사용하기 어렵기 때문에

기본적인 git command 들을 살펴보면서 추후 혹시 모를 상황에 대비해두는게 좋을 것 같다.

 

참고

https://velog.io/@janeljs/git-4

 

Git의 기본 개념들 (1) (working directory, staging area, remote)

Git vs SVN(SubVersion) SVN 변경 내용만 저장 → 변경 내용 발생 시 처음으로 거슬러 올라가며 바뀐 점을 모두 반영하는 계산 필요 Git 변경 내용 포함 전체 코드를 저장 → Delta(차이점)이 아닌 Snapshot을

velog.io

https://www.zerocho.com/category/Git/post/581042fdcae2d100152ceae6

 

https://www.zerocho.com/category/Git/post/581042fdcae2d100152ceae6

 

www.zerocho.com

https://velog.io/@delilah/GitHub-Git-%EB%AA%85%EB%A0%B9%EC%96%B4-%EB%AA%A8%EC%9D%8C

 

[GitHub] Git 명령어 모음

_ # INDEX _ _ Git 명령어 _ 명령어 | 명령어 | 내용 설명 | |:----------:|:----------:| | $ git init | .git 하위 디렉토리 생성 | | $ git add 파일명 | 수정사항 중, 커밋에 추가 | | $ gi

velog.io

https://subicura.com/git/guide/basic.html#git-init-%E1%84%8C%E1%85%A5%E1%84%8C%E1%85%A1%E1%86%BC%E1%84%89%E1%85%A9-%E1%84%86%E1%85%A1%E1%86%AB%E1%84%83%E1%85%B3%E1%86%AF%E1%84%80%E1%85%B5

 

기본 명령어

Git/GitHub 안내서 - 기본명령어

subicura.com