본문으로 바로가기

GIT HUB 버젼관리

category GIT 2019. 12. 23. 18:03

GIT 이란?


1. GIT 이란?

Git repository란 말 그대로 파일이나 폴더를 저장해 두는 곳이다.

비슷한 파일도 실제 내용 일부 문구가 서로 다르면 다른 파일로 인식하기 때문에 파일을 변경사항 별로 구분해서 저장할 수 있다.

 

2. 원격 저장소와 로컬 저장소 

원격 저장소(Remote Repository): 파일이 원격 저장소 전용 서버에서 관리되며 여러 사람이 함께 공유하기 위한 저장소입니다.

로컬 저장소(Local Repository): 내 PC에 파일이 저장되는 개인 전용 저장소입니다.

 

[출처] https://backlog.com/git-tutorial/kr/intro/intro1_2.html

 

3. 저장소를 만드는 방법 

(1) local 저장소를 새로 만들기 : git init

(2) 이미 만들어져 있는 원격 저장소를 로컬 저장소로 복사 : git hub

 

 

4. local 저장소에 저장 되기 까지의 과정

working tree에 있는 내용이 stage에 올라가야 저장소에 변경사항을 기록할 수 있다.

 

 

 

GIT 설치 / 확인


1. GIT 설치하기

https://git-scm.com/

위의 사이트에 접속해서 Latest source Release 한다.

 

2. GIT 설치 확인하기 

명령프롬프트 창에서 git 입력 후 엔터를 하면 잘 설치된 경우 아래와 같은 메시지가 나온다.

 

 

GIT 사용자 설정


1.  사용자 설정하기

딱 한번만 설정하면 된다.

git에서 커밋을 할 때마다 이 정보를 사용한다.

한 번 커밋한 후에는 정보를 변경할 수 없다.

만약, 프로젝트마다 다른 이름과 이메일주소를 사용하고 싶으면 --global 옵션을 빼고 명령을 실행하면된다.

 

2. 설정된 사용자 삭제하기

  • 설정된 사용자 삭제하기
git config --unset user.name
git config --unset user.email

 

  • global로 설정된 사용자 삭제하기
git config --unset --global user.name
git config --unset --global user.email

 

 

3. 설정 확인

git config --list

설정한 내용을 보여준다.

 

 

 

 

 

 

GIT 저장소 생성하기 / 최초로 커밋하기


1. git init

  • git 저장소 생성
  • git 저장소를 생성할 특정 폴더로 접속하여 git init을 한다.
    특정 폴더 안에서 한번만 하면 된다
  • git init을 한 폴더 안에 .git이라는 숨겨진 폴더가 생성된다.
git init

test_git2 폴더에 빈 git 저장소를 만들었다.

 

 

2. git status

  • 파일들의 현재 상태 확인

한줄씩 살펴보자 

  • on branch master : 현재 branch는 master 이고,
  • no commits yet : 아직 commit 된 내용이 없는 상태이다.
  • untracked files : fun.html 빨간색 글씨로 되어 있으면 commit 되지 않는(할 수 없는)파일이다.
                          git add를 해서 파일을 stage에 올린 후에 commit을 할 수 있다고 나와 있다.

 

 

3. git add

//선택한 파일만 stage에 올리기
git add 파일명

//모든 파일 stage에 올리기
git add .

모든 파일을 stage에 올리기 위해 git add . 을 했다.

그랬더니 파일이름이 초록색으로 변했다.

  • changes to be committed : 해당 파일은 commit될 준비가 되었다는 뜻이다.

만약 파일을 stage에서 내려서 commit될 수 없는 상태(untracked)로 만들고 싶다면

git rm 파일명

위의 코드를 작성해주면 된다.

 

 

 

4. git commit

git commit -m "설명"

-m 옵션 : 다음에 설명이 온다는 것을 표시

commit에 대한 설명을 살펴보자

1개의 파일이 변경되었고, 12개의 줄이 새로 추가되었다고 한다.

현재 파일의 상태를 확인해보니 

아무것도 커밋할 것이 없다고 한다.

 

 

add와 commit 동시에 하기

 git commit -am 설명

 

 

**주의! 

- 로그인을 안 한 경우 :
  에러가 뜬다. 그때는 git config --global user.email 과 git config --global user.name 명령어를 쳐서 정보를 등록한 후 다시 commit 한다.

- git commit할때 commit에 대한 설명을 작성하지 않은 경우 : 
  설명을 적으라는 말이 나온다.

  이때 i 를 누르면 --끼워넣기-- 라는 말이 나오고 커서가 표시되어 commit 내용을 작성 할 수 있다.

  ESC를 누르면 commit 내용 작성을 종료하는 것이다.

  :wq를 하면 commit을 하면서 창을 빠져 나올 수 있다.


  

 

5. git log

commit 된 내역을 볼 수 있는 명령어

commit을 할 수록 로그에 남는다.

 

 

 

<옵션>

--graph

 

 

 

 

Commit 수정/취소 하기


1. git diff

  • 수정된 파일에서 어떤 부분이 달라졌는지 확인하고 싶은 경우 사용하는 명령어
  • 그러나 명령프롬프트에서는 바뀐 부분을 확인하기 힘들기때문에 
  • Git GUI나 Git을 지원하는 IDE를 사용한다.

Untracked와 Tracked의 3단계

  • Unmodified : commit을 한 후 변경점이 없을때
  • Modified : 파일을 변경했을때
  • Staged : 변경한 파일을 add 했을때(초록색으로 표시되는 파일

[출처] https://www.zerocho.com/

 

 

 

 

2. git checkout 브랜치명

  • head(cousor)를 옮기는 것
  • modified 상태의 파일을 add 하지 않고 다시 unmodified로 되돌리는 것
  • 수정을 잘 못해서 파일을 원 상태로 되돌리고 싶을때 사용한다.
git checkout 브랜치명

 

  • HEAD를 1개 commit 전으로 되돌리기
    ~(물결표시) : 물결표 1개=commit 1개전
// HEAD를 1개 COMMIT 전으로 돌리다.
git checkout HEAD~

 

  • tracked 되었으나 Unstaged였던 변경 사항이 취소됨.
  • 취소한 사항을 다시 되돌릴 수 없음
git checkout .

 

 

 

3. git clean

  • Untracked 상태인 내용을 삭제하고 싶을때 사용
  • 취소한 사항은 다시 되돌릴 수 없음
  • 옵션 : -fd (파일과 디렉토리 모두 없앤다는 옵션)
git clean -fd

 

 

 

4. git reset 

  • tracked 되었고 Staged되었던 변경 사항이 취소
  • 커밋 취소 하기(default 옵션 : --mixed)
  • 주의! 기록이 남지 않아 rollback 했을때 reset하기 전의 상황을 알 수 없음
//head~ : 현재 head가 위치한 commit 취소하기
git reset head~
//커밋아이디 리셋
git reset 커밋아이디

 

<옵션>

--soft : add된 상태로 commit만 취소한 것

git reset --soft HEAD~

--mixed : staging area, commit 취소 /default 값

git reset --mixed HEAD~

--hard : working dir, staging area, commit 모두 취소. 즉, 다 날려버린다.

git reset --hard HEAD~

 

5. git revert

필요성
revert를 하면 취소하고자 했던 commit을 제외하고 새로운 commit이 만들어진다.
따라서 rollback했을때 취소하기 전의 이력을 확인할 수 있다.

git revert HEAD
git revert 커밋아이디

 

 

 

6. git reflog

git 이력확인하기

git reflog

 

 

 

7. cherry pick

merge는 따로 하지 않고, 내가 원하는 commit만 합쳐서 새로운 merge를 만들 수 있다.

git cherry-pick 커밋아이디

 

 

Branch 관리(local)


 

git branch

 

 1. branch 만들기

git branch 브랜치명

 

 

 

2. branch 삭제하기

git branch -d 브랜치명

 

 

 

merge


merge

branch 병합하기

(1) 합칠 branch로 이동 후 

(2) git merge 브랜치명

 

 

1. 충돌 사항이 없는 경우(겹치는 부분이 없는 경우 )

 

겹치는 부분이 없어 충1돌이 일어나지 않는 경우,

소프트웨어가 자동으로 merge를 해준다.

 

[예시]

master branch와 lab1 branch는 각각 추가한 부분이 다르다.

수정한 부분이 중복되는 곳이 없어 충돌이 일어나지 않을 경우 auto merge가 되는 과정을 살펴보자

  • master branch : p요소 추가
  • lab1 branch : style 요소 추가

  • master branch에서 lab1 branch merge 하기

 

 

2. 충돌 사항이 있는 경우(겹치는 부분이 있는 경우)

(1)충돌하는 부분 해결하고 파일을 저장한다.

(2)add, commit 을 진행한다.

 

[예시]

master 브랜치 에서 <s/> 태그를 추가 후 저장하고

merge 브랜치를 만들어 <s/> 태그를 지우고, 그 자리에 <span/> 태그를 2개 추가했다.

그리고 merge를 할때 <s/>태그롸 <span/> 태그를 모두 합치려고 한다.

<좌> master브랜치 commit 내룡    <우> merge 브랜치 commit 내용

이 경우, <s/> 태그가 있던 18번 라인에 <span/> 태그가 들어왔으므로 같은 자리에 다른 내용이 작성되었으므로 충돌이 발생하게 된다.

VScode 에서 보면 아래와 같이 merge할 때 어떤 부분에서 충돌이 일어났는지 알 수 있다.

('현재 변경 사항 수락|수신 변경사항 수락|두 변경 사항 모두 수락|변경 사항 비교' 를 클릭하면 손쉽게 수정할 수 있다.)

<s/>태그와 <span/> 태그를 모두 추가하고 저장한다.

그 후, git add와 git commit 을 진행한다.

master 브랜치에 commit이 성공적으로 진행된 것을 확인할 수 있다.

 

 

 

 

 

 

원격 저장소(Remote Repository)


github(원격 저장소)에 연결하려면 github에서 저장소(repostory)를 만든 후, local 저장소의 .git과 연결해야한다.
(단, github 저장소 1개는 local 저장소 1개랑만 연결 가능하다. 동시에 여러저장소를 연결 할 수는 없다.)

 

원격저장소에 나의 작업 물을 올릴때는 반!드!시 원격저장소에 있는 내용을 pull해서 나의 작업물과 merge한 뒤 올려야한다.

 

local repository와 remote repository를 연결하는 방법은 아래의 명령어를 작성 후 엔터를 눌러주면된다.

git remote add 저장소이름 깃헙_저장소_주소

- 저장소 이름은 원하는데로 작성 가능하나 관례상 'origin'을 많이 쓴다.

github에서 저장소를 만들면 주소를 확인 할 수 있다.

 

 

1. 원격 저장소에 Push 하기

웹 상의 원격 저장소로 변경된 파일을 업로드하는 것을 Git에서는 푸시(Push)라고 한다.

git push -u 저장소이름 브랜치이름

//ex) git push -u origin master : 모든 파일(-u)을 origin remote저장소에 master브랜치를 올린다.

 

이미 로컬에 존재하는 브랜치가 리모트의 특정 브랜치를 추적하게 하려면 git branch 명령에 -u  --set-upstream 옵션을 붙여서 아래와 같이 설정한다.

git branch -u origin/serverfix

 

추적 브랜치가 현재 어떻게 설정되어 있는지 확인하려면 git branch 명령에 -vv 옵션을 더한다.

 

원격 저장소에 push를 하면 branch pointer가 하나 더 생긴다. 

즉, remote repository를 추적하는 branch가 하나 더 생기는 것이다.

좀 더 자세히 확인해보기 위해 master 브랜치에 commit을 해보자

master 브랜치에 p1을 추가 후 commit을 했기때문에 master branch pointer 는 한 단계앞으로 이동했다.

그러나 아직 remote repository에는 push를 해주지 않았기 때문에 remotes/origin/master branch pointer는 아까 그 자리에 그대로 있다.

git branch -vv 명령어를 입력하면 현재 상태를 알 수 있다.

그럼 이제 변경사항을 remote 저장소에 push 해보자

 

 

 

 

2. 원격 저장소에서 clone 해오기

 

복제할때 처음 한번만 clone 하면된다.

복제란 원격 저장소의 내용을 통째로 다운로드하는 것을 말한다.

복제한 저장소를 다른 PC에서 로컬 저장소로 사용할 수 있게 된다

 

1. clone 하기

(1) github에서 clone 주소 복사하기

 

(2) clone할 폴더에서 아래의 코드 입력 후 엔터

git clone https://github.com/sallykorea/HelloGit.git

 

(3) clone한 폴더 안에 .git이 있으므로 master 브랜치로 이동하려면 폴더 안으로 접근해야한다.

 

 

2. clone한 저장소의 변경된 내용 다운 받기

(1) fetch

remote저장소에 변경된 내용을 갖고 옴

git fetch 깃헙브랜치명

 

 

(2) merge : 내가한 잔 작업물과 변경된 저장소의 내용을 합침

 

 

 

3. 원격 저장소의 내용 Pull 하기

 

fetch 와 merge를 한번에 해준다.

 git pull

 

 

내가 작업을 하고 다른 사람의 작업내용의 원격저장소에서 pull하는 경우

hellogit에서 작업한 내용을 commit 했다.
commit 후 다른 사람의 작업물을 fetch 했다.
fetch 한 것에 대한 branch가 생성됨

두가지를 합쳐주려면 merge 하고 커밋을 해주어야한다.

 

 

이제 내가 한 작업물이 가장 최신이므로 remote repository에 push를 해주자

 

 

4.  원격 저장소 삭제하기

 

git remote remove 저장소이름

 

 

5. 원격 저장소 브랜치 삭제하기

git push origin  :삭제할브랜치명 
//예 : git push origin  :lab1

 

 

6.

 

 

 

stash


필요성

commit을 하지 않고 다른 branch로 이동하면 commit 하지 않은 내용은 모두 날라간다.

그렇다고 현재 branch에 커밋을 하기에는 애매하고, 그렇다고 코드를 날리기에는 아까운 경우 stash를 사용한다.

마치 내 주머니에 따로 수정된 사항을 따로 넣어 놓는 느낌

 

 

stash 명령 적용대상

  1. Modified + Tracked 상태인 파일 (한번이라도 add를 한 적이 있는 파일)
  2. Staging Area에 있는 파일

 

명령어

commit 되지 않은 내용도 저장을 해놓고 싶다면 git stash save를 사용할 수 있다.

git stash save -u
  • -u : untracked 파일도 같이 stash 영역에 올리겠다는 옵션

 

 

git stash list
  • stash 영역에 올라간 list 확인

 

git stash apply
  • git stash apply 명령을 실행하여 Stash 내용을 다시 적용할 수 있다.
  • git stash apply stash@{2} 처럼 원하는 Stash 를 골라서 적용하는 것도 가능하다. (이름이 없으면 가장 최근 Stash 적용)
  • git stash apply --index 옵션을 통해서 Staged 상태까지 적용할 수 있다.

 

git stash drop
  • git stash drop stash@{2} 명령을 사용하여 해당 Stash를 제거한다.

 

git stash pop
  • stash 영역에 있는 내용을 적용하고 바로 list(스택)에서 제거하는 명령어

 

git stash branch
  • git stash branch 명령을 실행하면 Stash 할 당시의 커밋을 Checkout 한 후 새로운 브랜치를 만들고 여기에 적용한다. 이 모든 것이 성공하면 Stash를 삭제한다.

 

 

git GUI


GIT GUI 띄우기

git gui