평소 git을 gui로만 사용해서 cli로 써보기위해 찾아봄.
commit
일종의 스냅샷. 코드를 add하고 commit 하면 새로운 버전의 스냅샷이 생성됨.
git commit -m 'commit exaplain'
branch
특정 커밋에 대한 참조. 많이 만들어도 디스크나 메모리 공간에 부담이 되지않음. 매번 새로운 기능을 만들때 항상 branch를 여러개 만드는게 중요.
git branch branchName (브랜치 생성), branch - f foo c3 (foo브랜치를 c3로 이동)
merge
두 브랜치를 합침.
git merge foo (HEAD에 해당하는 브랜치와 foo 브랜치를 함침)
rebase
base를 새롭게 둠. commit을 새로운 commit 아래에서 새롭게 시작함.
git rebase main (현재 커밋을 main 아래에 복사해둠)
checkout
커밋을 이동함
git checkout foo (foo 브랜치로 이동)
cherry-pick
이름같이 체리처럼 행동함. 자기 아래로 다른 커밋들을 복사해 가져옴. rebase 대신해 사용가능.
git cherry-pick c1 c2 c3 (c1,c2,c3 커밋을 복사해와 붙여줌)
reset
로컬 환경에서 HEAD에 해당하는 작업을 특정 커밋으로 되돌림. 애초에 커밋하지 않은 것처럼 작업함.
ex) git reset c1 (현재 HEAD 커밋을 c1으로 되돌림)
//강제로 되돌릴때
git reset --hard {commit number}
// remote 에도 반영
git push -f origin master
revert
원격 환경에서 사용됨. 특정 작업을 되돌리는데 변경사항을 원래대로 되돌리고 복사본을 commit함
git revert c2 (c2`이 새로 커밋됨)
fetch
원격으로부터 로컬 환경을 동기화시킴.
원격 저장소에는 있지만 로컬에는 없는 커밋들을 다운받아오고, 로컬에 원격 브랜치가 가리키는 곳을 업데이트함(origin/main 같은)
그러나 로컬 환경을 변경시키지는 않음. 그래서 현재 작업중이라면 fetch가 안전함.
pull
//git fetch + git merge origin/main. 가져와서 바로 머지시킴.
git pull
//merge 대신 rebase를 하고싶으면
git pull --rebase
push
로컬 환경을 원격 환경에 동기화 시킴.
':'을 명시하면 방향성을 표시할 수도 있음.
git push origin main (origin(원격) 에 main(로컬) 브랜치를 동기화해줌)
log
git log --graph (구체적 커밋 내역을 그래프로 확인)
git log --graph --oneline --all (커밋 내역을 한줄로 확인)
// readme 생성
echo "# jpabook_for_study" >> README.md
// 초기화
git init
// readmd stage
git add README.md
// commit
git commit -m "first commit"
// 현재 브랜치를 매인으로 정함
git branch -M main
// 원격 연결
git remote add origin https://github.com/shininghyunho/jpabook_for_study.git
// 앞으로 git push만 해도 main이 올라감
git push -u origin main
git remote add origin https://github.com/shininghyunho/jpabook_for_study.git
git branch -M main
git push -u origin main