git (2)

 

 

git 브랜치 관리법이 복잡하여 따로 정리해둡니다. 😄

 

로컬에 git 관리하에 없는 디렉토리에 특정 브랜치만 clone 하기

git clone -b {branch 이름} {remote 주소}

 

 

새로운 브랜치를 만들고 현재 작업중인 브랜치를 전환하기

git checkout -b {branch 이름}
git switch -c {branch 이름}

 

 

브랜치 전환하기

git checkout {branch 이름}
git switch {branch 이름}

 

 

commit 자세히 남기기

git commit

 

 

스테이지에 올라간 파일 내리기(언스테이징)

git reset {file 이름}

 

 

stash에 현재 변경 사항, 스테이징된 파일 임시 저장하기

git stash

 

 

stash에 있는 변경 사항 적용하기

git stash apply

 

 

stash에 있는 변경 사항 적용하고 삭제하기

git stash pop

 

 

stash에 임시 저장된 변경 사항 확인하기

git stash list

 

 

트랙에 있는 언스테이징된 파일 캐시 지우기 (트랙 초기화)

git rm -r --cached .

 

 

현재 브랜치 원격 저장소에 push 하기

git push {원격 저장소 이름} {branch 이름}

 

 

현재 작업중인 브랜치가 아닌 다른 원격 저장소 브랜치에 push 하기

git push {원격 저장소 이름} {로컬 브랜치 이름}:{원격 브랜치 이름}

 

 

git push할 때 기본값 지정하기

git push -u {원격 저장소 이름} {branch 이름}

➡️ 이후엔 같은 저장소 같은 브랜치로 push 할 때는 'git push' 명령어로 가능

 

 

강제로 pull 하기

git pull -f

 

 

 

 

'GIT' 카테고리의 다른 글

[GIT] 브랜치 Merge(병합) 전략  (0) 2022.09.23

 

 

 

버전 관리 시스템(Vesion control System)

 

텍스트 에디터를 종료한 이후에 다시 들어가서 실수를 고칠 방법이 없음

☞ 이전에 작성했던 내용을 보존해 주는 시스템 (버전 관리 시스템)

 

스냅샷: 특정 시점에 생성된 백업 복사본

commit: 하나하나 스냅샷을 만들어 주는 작업

 

 

버전 관리를 사용하는 이유

  • 파일 변경 이력을 저장할 수 있음
  • 이전 버전으로 돌아갈 수 있음
  • 어떤 변경 사항이 있는지 알아보기 쉬움
  • 협업에 편리
  • 백업용

 

 

Git

 

Git 은 강력한 버전 관리 시스템

버전 관리와 협업 시스템

실제로 실무에서 많이 사용

분산형 버전 관리 시스템

코드 뿐만 아니라 텍스트 파일의 변경점도 하이라이트로 한눈에 볼 수 있음

 

 

 

 

Github

 

  ▷ Git Repository(저장소)를 관리할 수 있는 클라우드 기반 서비스

  ▷ Git Repository: Git으로 관리되는 폴더

  ▷ Git으로 버전을 관리하는 폴더에 대해서 Github를 통해 여러 사람들이 공유하고 접근할 수 있음

  ▷ 개발자들의 SNS

  ▷ 깃허브에서 code review 등을 통해 협업이 가능

  ▷ 수많은 오픈 소스 프로젝트들 호스팅

  ▷ 오픈 소스는 누구나 자유롭게 기능 추가 개선 ☞ 기여(contribute)라고 함

 

 

 

Git Repository

 

Remote Repository와 Local Repository 제공

로컬 저장소에서 작업한 소스를 원격 저장소에 올림

 

 

contribute하기

 

기여할 원격 저장소를 내 원격 저장소로 가지고 와야함 (Fork)

로컬 저장소로 코드를 옮겨옴 (Clone)

변경된 내용을 commit을 통해 저장해주고 원격 저장소에 반대로 올려주는 작업 (Push)

Pull request : 내가 제안한 코드 변경사항에 대해 반영 여부를 요청

Pull : 원격 저장소에서 변경사항이 있을 때 로컬 저장소로 가져오는 작업

 

 

 

Git 설치하기

 

Mac: 터미널에서 git 입력하면 자동으로 설치됨

Windows: https://gitforwindows.org 에서 설치

Ubuntu: 터미널에서 sudo apt install git 입력하면 설치됨

 

git --version 으로 설치한 깃 버전 확인

 

 

 

 

Git 환경설정

 

 

사용자 정보 등록

 

git config --global user.name "나의 사용자 이름"

git config --global user.email "내 이메일 주소"

 

 

 

Git의 에디터

Git에서 commit 기록할 때 (merge commit 확인 메시지가 나올 때) 텍스트 에디터 열림

기본값 vi로 설정되있는데 편의성을 위해 nano로 변경하기

 

git config --global core.editor nano

 

 

 

참고)깃 최초 설정

https://git-scm.com/book/ko/v2/%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-Git-%EC%B5%9C%EC%B4%88-%EC%84%A4%EC%A0%95

 

 

 

 

SSH 등록

 

 

SSH 란?

  • Secure shell의 약자
  • 보안이 강화된 shell 접속을 뜻함
  • CLI 환경에서 다른 PC에 접속하거나 요청할 때 사용
  • 비대칭키를 이용해 사용자 인증
  • 터미널에서 SSH를 이용해 git clone 할 수 있음

 

 

터미널에서 ssh키 생성하기

 

ssh-keygen

경로 ~/.ssh/ 에 두 파일 id_rsaid_rsa.pub 생성

id rsa.pub는 공개해도 되는 공개키(public key)

id_rsa는 공개되면 안되고 보관하고 있어야 하는 키(private key, secret key)

 

 

 

public key를 github에 등록하기

 

터미널에 cat ~/.ssh/id_rsa.pub 입력하고 출력된 공개키 복사

 

깃허브 → 우측 상단에 프로필 클릭 → Settings → 왼쪽에서 SSH and GPG keys 선택 → New SSH Key 클릭

→ title 작성하고 Key 박스에 붙여넣기 → Add SSH key → 깃허브 계정 비번 입력

 

여기까지 마쳐야 git clone이 정상적으로 된다.

 

 

CLI 사용을 위한 인증 방법

 

OAuth (Device Authorization) 인증 방법 이용

GitHub CLI 설치

☞ macOS는 homebrew 설치 후 명령어 brew install gh 입력

 

gh auth login 명령어를 통해 로그인 시도

아래 항목들 선택 후 엔터키

What accout do you want to log into? ☞ GitHub.com

What is your preferred protocol for Git Operations? HTTPS

Authenticate Git with your GitHub credentials? Yes

How would you like to authenticate GitHub CLI? Login with a web browser

 

잘못 선택한 경우 Ctrl + C (^ + C) 를 눌러 중단할 수 있음

 

Login with a web browser 옵션 선택하면 one-time code 화면에 나옴

코드 복사 → Enter 키 → Device Activation 창에 코드 입력 → 인증 완료!

 

 

 

Git repository workflow

 

 

 

 

Fork

깃허브에서 다른 계정의 Remote Repository를 내 Remote Repository로 가지고 오기 (Fork)

Fork 버튼 클릭

 

 

git clone

터미널에서 작업을 원하는 폴더 내에서 git clone [repository 주소]

내 컴퓨터(Local Repository)로 가져와짐

 

 

git status

gjit status 명령어로 현재 staging area와 untracked files 목록에 어떤 것들이 있는지 확인

수정된 파일은 modified라고 되어있음

충돌 시 어떤 파일이 충돌했는지 확인 가능

 

 

git add

git status로 출력한 화면에서 modified(변경된 상태) 이지만 changes not staged 인 파일은 git add 명령어로 staging area에 올려줌

git add [파일이름]

git add .  ☞ 폴더 내의 모든 파일 한 번에 staging area로 올림

Staging area 란? Repository에 올라가기 전에 commit 하기 위해 거치는 단계

Staging are에 올린 후 파일을 수정하면? modified 된 파일을 git add 명령어로 다시 Staging area에 올려줘야 함

 

 

git restore

Local Repository에서 작업한 내용을 모두 취소하고 clone 받았던 상태로 되돌리는 명령어

commit 되지 않은 Local Repository의 변경 사항을 폐기

git restore [파일이름]

 

 

git commit

git add 로 staging area에 올라간 파일은 commit 가능

commit 할 때 옵션 -m 을 통해 간단한 메모 가능 (날짜, 변경자, 버전 변경 기록 등)

git commit -m '메시지'

충돌 후 merge 한 commit을 자동으로 올릴 때 명령어 git commit 입력함

 

좋은 commit 메시지를 작성하기 위해 참고할만한 링크

https://cbea.ms/git-commit/

 

How to Write a Git Commit Message

Commit messages matter. Here's how to write them well.

cbea.ms

 

 

git reset

아직 Remote Repository에 올라가지 않은 commit을 취소하는 명령어

git reset HEAD^ / git reset HEAD~1 : 가장 최신의 commit을 취소

HEAD : 현재 branch를 가리키는 포인터, 현재 branch에 마지막 commit의 스냅샷

 

git reset --hardgit reset --soft 의 차이

 

git reset --hard / git reset --soft

hard는 Staging area까지 비우기 때문에 신중하게 써야함!

 

git reset 더 알아보기

https://git-scm.com/book/ko/v2/Git-%EB%8F%84%EA%B5%AC-Reset-%EB%AA%85%ED%99%95%ED%9E%88-%EC%95%8C%EA%B3%A0-%EA%B0%80%EA%B8%B0

 

Git - Reset 명확히 알고 가기

지금까지 reset 명령을 실행하는 기본 형태와 사용 방법을 살펴봤다. reset 명령을 실행할 때 경로를 지정하면 1단계를 건너뛰고 정해진 경로의 파일에만 나머지 reset 단계를 적용한다. 이는 당연한

git-scm.com

 

 

git push

Local Repository에 저장되어 있는 commit 기록들을 내 Remote Repository에 업로드

git push [저장소명] [브랜치명]

 

 

git log

현재까지 commit 된 내역들을 터미널 창에서 확인하는 명령어

q 입력하면 종료됨

 

 

Pull Request

내 Remote Repository에 Push 해놓은 변경 사항에 대해서 함께 작업하는 다른 사람들에게 알리는 것

줄여서 PR이라고 함

Push 한 후에 내 Remote Repository에 가면 Pull Request 할 수 있는 버튼 생김

 

 

git init

내 컴퓨터에 존재하는 디렉토리를 Git의 관리하에 들어가게 만들어주는 명령어

Git Repository로 변환

새로운 Repository를 초기화 할 때도 사용

 

 

git remote

현재 저장소의 모든 리모트 저장소를 조회

 

git remote add [저장소 이름] [Remote Repository 주소] 

  ☞ Local Repository를 Remote Repository에 연결, 다른 사람의 Remote Repository와도 연결 가능

 

git remote -v

  ☞ 현재 Local Repository와 연결된 모든 Remote Repository 목록 확인

 

 

git pull

git pull [저장소명] [브랜치명]

Remote Repository에 있는 작업내용을 불러옴

받아온 내용은 자동 병합(merge) 됨

 

 

충돌

동시에 같은 부분을 변경하고 push 하면 충돌이 발생할 수 있음 → 보통은 자동 병합(merge)되지만 실패하는 경우도 있음

터미널에 Merge conflict가 발생해서 Automatic merge에 실패했다고 메시지 뜸

충돌한 파일을 수정 완료 했다면 stagining area에 파일 추가

충돌 해결후 staging area에 올리면 자동으로 commit 메시지가 생성됨 (그대로 사용하거나 수정 가능)

Remote Repository에 다시 업로드

 

 

1