Git은 3가지 요소로 구성이 되어 있다.
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
: 원격 저장소를 의미함.
(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.md와 github docs를 참조했다.
각 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
로 다른 이름을 명명해준다.
기본 위치인 /home/$USER/.ssh/id_rsa
에 저장을 해주고, passphrase를 입력해준다. passphrase
는 문장형 비밀번호이다. 공백 포함이 가능하다. (ex. 이것은 문장형 비밀번호
; 한글을 영어로 입력을 해주면 보안성이 매우 좋다.. 한국인만 가능하다)
eval "$(ssh-agent -s)"
ssh-agent를 불러온다. terminal 시작 시 자동으로 불러올 수 있다. (추가 예정)
ssh-add ~/.ssh/id_rsa_*
로 key를 agent에 추가하면 된다. (사용하고자 하는 key를 불러오면 된다.)
~/.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
ssh -T github-my
와 ssh -T github-company
를 모두 사용하여 서로 다른 User name이 나오는지 확인한다. 목적에 맞는 User name 이 등장하면 성공! 같은 이름이 등장하면 사용된 key가 제대로 설정되지 않은 것이다.git clone github-my:MY-ID/MY-REPO.git
와 같이 불러오면 된다.