본문 바로가기
DevOps/Git

[git 이해하기1] git과 외부저장소

by 태옹 2021. 7. 7.

1. git디렉토리 생성하기

git init

프로젝트의 디렉토리를 git으로 버전관리할 수 있음

프로젝트의 디렉토리 안에 .git이라는 디렉토리가 생성됨 ->.git디렉토리 안에 버전관리를 위한 기능들을 알아서 관리해줌

(.git파일은 우리가 건드는 파일이 아니기 때문에 폴더에서 확인하면 찾을 수 없음! 기본적으로는 숨김파일 처리가 되어있음)

 


2. 사용자 정보 설정하기

(1) git을 사용하고 있는 사용자의 이름을 설정함

git config user.name "사용자이름"

 

(2) git을 사용하고 있는 사용자의 이메일을 설정함

git config user.email "사용자이메일"

 

=> 히스토리를 남긴 사용자의 정보를 확인할 수 있음

 


3. Staging Area에 Commit하기

commit : 특정 버전을 저장하는 것

◾ Working Directory : 실제로 다루고 있는 프로젝트 디렉토리 자체를 의미함

 Staging Area : 특정 버전으로 관리하고 싶은 파일들을 모아두는 장소

 Repository : 특정 시점의 Staging Area의 모습을 commit으로 남기면 그 commit들이 저장되는 영역

 

=> 커밋들이 레파지토리에 순차적으로 저장되면서 버전관리를 함

 

👇 중간에 Staging Area가 필요한 이유에 대해서는 아래의 포스팅에서 참고하기

https://github.com/yeoseon/tip-archive/issues/85

 

[Git] Staging area는 왜 중요한가. · Issue #85 · yeoseon/tip-archive

Git의 영역 Git 디렉터리, 워킹 트리, Staging Area Git 디렉터리 Git 디렉터리(.git 디렉터리, 깃 저장소) git init 명령으로 .git이라는 이름으로 생성된다. Git 프로젝트의 모든 메타데이터와 객체 데이터베

github.com

 

Staging Area에 올리는 명령어

(1) 특정 파일(들)을 올리기

git add 파일이름			#파일 하나만 올리는 경우
git add 파일이름 파일이름 파일이름	#여러개의 파일을 올리는 경우

(2) 전체 파일을 올리기

git add .

 

Staging Area에 있는 파일을 commit하는 명령어

git commit -m "커밋메시지"		# -m 옵션은 메시지를 의미함

커밋메시지에는 어느 부분이 변경되었는지를 팀원들이 쉽게 파악할 수 있도록 친절하게 작성해주는 것이 좋음 = 협업을 위함

 

 

현재까지의 commit기록을 확인하는 명령어

git log

 

 

두 커밋을 비교하는 명령어

git diff 커밋1id 커밋2id

 커밋id의 앞 네 자리만 입력해도 git이 인식할 수 있음

    f371053ce09cd981adc2b0a18817ddf408e58012 => f371

 q를 눌러서 log창에서 나옴

 


4. Commit간에 이동하기

git log명령어를 사용했을 때 확인할 수 있는 창

 HEAD : 현재 내가 위치해있는 커밋을 가리키는 식별자

 (기본적으로는 가장 최신 커밋에 위치해있음)

 

HEAD가 가리키는 커밋을 변경하는 명령어

git reset --hard 이동하고싶은커밋id
git reset --mixed 이동하고싶은커밋id
git reset --soft 이동하고싶은커밋id

 Hard : HEAD가 가리키는 커밋의 모습대로 Working Directory의 모습이 변경됨(파일 변경)

 Mixed : Working Directory상태는 변경되지 않고 Staging Area의 상태만 변경됨

 Soft : Working Directory, Staging Area의 상태는 변경되지 않고 HEAD만 이동

 

 

현재 git의 상태를 구체적으로 확인하는 명령어

git status

 

 

(1) Hard와 Mixed,Soft옵션의 차이점

Hard : Working directory를 건드림

Mixed,Soft : Working directory를 건드리지 않음 (변경 안됨)

 

(2) Mixed와 Soft옵션의 차이점

Mixed : Staging Area를 HEAD가 가리키는 커밋상태로 변경

Soft : Staging Area도 안건드림

 

(3) Mixed와 Soft옵션을 사용하는 이유

만약 레파지토리에 이미 commit6까지 상태인데 4~6까지의 커밋 내용은 마음에 들지 않고, commit3이 가장 만족스러운 상태이다. 그러면 mixed나 soft 옵션을 사용해서 레파지토리의 HEAD를 commit3에 위치시켜두고, 현재 내 Working Directory에 있는 commit7을 HEAD의 위치에 commit하게 되면 불만족스러워썬 commit4~6의 내용은 생략할 수 있다.

 

 

HEAD가 가리켰던 commit기록을 모두 보여주는 명령어

 git reflog

 


5. 외부저장소에 commit하기

(1) 외부저장소 : Github, GitLab, Bitbucket 등..

 

(2) 외부저장소를 사용할 때 장점

 프로젝트 복구 가능

 협업과 동시에 버전 관리 가능

 

외부 저장소의 url을 알려주는 명령어

git remote add origin 외부저장소url

 git remote : 외부 저장소를 사용

 url이 가리키는 외부 서버의 프로젝트를 원격 저장소로 지정, 이름은 origin으로 설정

 한 번만 remote해주면 됨!

 

외부저장소에 저장하는 명령어

git push -u origin master

 git push : 현재 내 프로젝트의 내용을 전부 origin에 업로드

 

외부저장소에 있는 프로젝트를 맨 처음 내 컴퓨터에 가져올 때 사용하는 명령어

git clone 원격저장소url

 처음 한 번만 가져옴

 clone명령어로 프로젝트를 가져온 경우 새로 remote해줄 필요 없음

 

외부저장소의 내용을 가져오는 명령어

git pull

 현재 remote되어있는 저장소에서 최신 프로젝트 내용을 가지고 옴

 

 

* 원격저장소의 경우 협업툴로 사용하는 경우가 많기 때문에 원격저장소의 프로젝트 내의 최신 커밋내용이 내가 커밋하려는 내용에 포함되지 않은 경우 업로드를 막아버림(강제로 push할 수 있지만 말그대로 협업툴이기 때문에 권장x)

원활한 사용을 위해서는 다음 단계로 작업하기 : pull -> 내용을 변경 -> push

댓글