Git 사용법

Git Manual#

Git은 3가지 요소로 구성이 되어 있다.

  • 작업 트리(working tree or working directory) - Directory 자체를 의미한다.
  • 스테이지(stage) - git 상에 추가된 파일들을 의미한다. (.git/index)
  • 저장소(repository) - commit 되어 버전으로 남은 것들을 의미한다. (.git/HEAD)

git commit --amend: 방금 commit한 메세지 수정이 필요할때

git status: 현재의 상태

git log [--oneline] [--branches] [--graph]: 저장소 log

git diff:

git checkout -- <paths>: 작업 트리에서 수정한 파일 되돌리기

git reset <tree-ish> <paths>: 기존 commit을 제거하고 돌아감.
(HEAD^^ 현재 HEAD에서 전전을 의미함.)

git revert <tree-ish>: 기존 commit을 놔두고 새로운 commit을 만듦.

git branch <branchname>: branchname으로 새로운 branch 생성.

git checkout <branch>: 해당 branch로 설정.

git log <path>..<path>*: 아직 잘 모르겠음.

git merge <branch>: 현재 HEAD에 해당 branch를 합친다.

git stash [list|pop|apply|drop]: 수정된 파일들을 일시적으로 숨김.
(working tree의 변경내용을 commit하기 싫을 때)

git pull: git fetch + git merge FETCH_HEAD

origin: 원격 저장소를 의미함.

하나의 컴퓨터(local machine)에서 다중 User를 이용한 github 작업. (수정 중)#

(SSH key 를 사용한다는 가정을 둔다. SSH key (= public key)는 보안을 올려주는 중요한 기능이다. 굳이 Github가 아니더라도 remote 접속시 보안을 지킬 수 있다.)

GitHub 작업 시에 개인 계정과 회사 계정이 있을 경우 git 작업이 다소 복잡해진다. 우선 git clone 부터 문제가 생긴다.

GitHub 는 계정당 하나의 ssh-key를 가지게 된다. 서로 다른 User가 동일한 ssh-key를 가질 수 없다. User 별로 ssh-key가 필요하다.

본 글은 JoaquimLey의 github_multiple-accounts.mdgithub docs를 참조했다.

  1. 각 GitHub 계정 별 ssh-key를 생성한다. ssh-keygen -t rsa -b 4096 -C "your_email@example.com" (여기서 -t는 rsa 방식을 이용하며, -b는 4096 bit의 key를 생성하며, -C는 “your_email@example.com“의 comment를 추가하겠다는 얘기이다. 기본은 rsa에 2048 bit 의 key가 생성된다.)
    만약 기존의 ~/.ssh/id_rsa 가 존재하면, ssh-keygen -f ~/.ssh/id_rsa_COMPANY로 다른 이름을 명명해준다.

  2. 기본 위치인 /home/$USER/.ssh/id_rsa에 저장을 해주고, passphrase를 입력해준다. passphrase는 문장형 비밀번호이다. 공백 포함이 가능하다. (ex. 이것은 문장형 비밀번호; 한글을 영어로 입력을 해주면 보안성이 매우 좋다.. 한국인만 가능하다)

  3. eval "$(ssh-agent -s)" ssh-agent를 불러온다. terminal 시작 시 자동으로 불러올 수 있다. (추가 예정)

  4. ssh-add ~/.ssh/id_rsa_*로 key를 agent에 추가하면 된다. (사용하고자 하는 key를 불러오면 된다.)

  5. ~/.ssh/config 파일에 github ssh config 정보를 추가한다.

Host github-my
    Hostname github.com
    User git
    IdentityFile ~/.ssh/id_rsa_MY
    ForwardAgent yes

Host github-company
    Hostname github.com
    User git
    IdentityFile ~/.ssh/id_rsa_COMPANY
    ForwardAgent yes
  1. ssh -T github-myssh -T github-company를 모두 사용하여 서로 다른 User name이 나오는지 확인한다. 목적에 맞는 User name 이 등장하면 성공! 같은 이름이 등장하면 사용된 key가 제대로 설정되지 않은 것이다.
  2. git clone github-my:MY-ID/MY-REPO.git 와 같이 불러오면 된다.