git
: 코드의 버전관리를 위한 tool
: 새로 변경된 부분이외는 이전 내용을 참조하는 형식으로 아주 적은 data만 사용
workflow
: "working directory"에서 작업을 어느정도 되면, "staging area"에 옮겨두고, commit 명령어를 통해 git directory로 보낸 후, pull과 push를 통해 진행
commit
: 각 시점에서 코드의 스냅샷
: 각 commit에는 고유의 hash code가 부여되어 있음
: 또한, messeage, author, date/time 정보도 함께 포함
push
: local git directory를 remote 환경으로 upload 하는 것
pull
: remote 환경(server)에서 local로 download 하는 것
git config --list
: 모든 git 환경설정내용 확인
git config --global -e
:에디터에서 config 내용을 확인하고 싶을 때
code .
: 코드 에디터로 직접 연결(VSC로 연결했음)
git config core.editor "code --wait"
: config 파일을 지정된 에디터로 열고, 관련 수행 종료 전까지는 터미널 작동 멈춤
git config --global core.autocrlf input
: 윈도우와 맥에서 줄 바꿈을 의미하는 값이 다른데, git에 업로드 및 다운로드하는 과정에서 줄바꿈 오류를 없애기 위하여, 자동으로 변환되도록 설정하기 위함
git init
: git 초기화, 자동으로 master branch 생성
git status
: 현재 상태확인
git add
: git이 tracking 하면서 staging area로 옮기기
.gitignore
: traking 하고 싶지 않은, git과 git hub에 올리고 싶지 않은 파일은 gitignore 파일에 넣어서 처리 할수 있음(ex> log 파일)
git diff
: 파일 비교
git log
: commit 정보 기록 보기
git commit
: Git 저장소에 여러분의 디렉토리에 있는 모든 파일에 대한 스냅샷을 기록하는 것
git branch "브랜치 명"
: 새로운 branch 생성
git checkout "브랜치 명"
: 현재 위치 branch 이동
git merge "브랜치 명"
: Git의 합치기(merge)는 두 개의 부모(parent)를 가리키는 특별한 커밋을 만들어 냄
: 지정한 브랜치를 현재의 브랜치와 merge한 새로운 commit 생성 (merge하고자 하는 대상이 현재 위치의 commit 보다 하위의 경우, 새로운 commit생성이 아닌 하위 commit에 병합됨)
git rebase "브랜치 명"
: 커밋들을 모아서 복사한 뒤, 다른 곳에 떨궈 놓는 것
: 커밋들의 흐름을 보기 좋게 한 줄로 만들 수 있음
: (동일 준위의 브랜치 간)지정한 브랜치의 하위 commit으로 이동 (이전 commit은 없어지지 않고 남아 있음)
: 상위 브랜치에서 하위 브랜치로 rebase 실행하면, 하위 브랜치 위치로 합쳐짐
HEAD
: 현재 체크아웃된 커밋 = 현재 작업중인 커밋 (= 상대적인 브랜치 명)
: 일반적으로 HEAD는 브랜치의 이름을 가리키고 있음(bugFix와 같이) 커밋을 하게 되면, bugFix의 상태가 바뀌고 이 변경은 HEAD를 통해서 확인가능
:git commit "commit고유 해시값(id)"
하게 되면, branch의 고유값을 가리키지 않고 HEAD가 분리되어 존재함
상대참조
:일반적으로 commit간 이동 시, commit의 해시값으로 이동하는 것은 매우 불편하므로 상대참조 개념이 도움
: 가장 일반적으로는 branch를 옮길때 사용
*'^(캐럿 연산자)' : 부모로 이동 (여러개 연속 사용 가능)
*'~(틸트 연산자)숫자' : 이어서 기재된 숫자만큼 위로 이동
git branch -f '재지정하고자하는 브랜치명' '위치(절대 or 상대 참조)'
변경사항 되돌리기
git reset 되돌아갈 위치
: 브랜치로 하여금 예전의 커밋을 가리키도록 이동시키는 방식으로 변경 내용을 되돌림. 이런 관점에서 "히스토리를 고쳐쓴다"라고 말할 수 있음
: 즉, git reset은 마치 애초에 커밋하지 않은 것처럼 예전 커밋으로 브랜치를 옮기는 것임
: add 명령 이전의 staging area에서 working directory 위치로 이동 명령git revert 되돌아갈 위치
: 각자의 컴퓨터에서 작업하는 로컬 브랜치의 경우 리셋(reset)을 잘 쓸 수 있습니다만, "히스토리를 고쳐쓴다"는 점 때문에 다른 사람이 작업하는 리모트 브랜치에는 쓸 수 없음
: 변경분을 되돌리고, 이 되돌린 내용을 다른 사람들과 공유하기 위해서는, git revert를 써야함
git cherry-pick commit1 commit2..
interactive Rebase
: 위의 cherry-pick와 달리 commit의 명칭을 잘 모르는 경우에 사용
: rebase 명령어 사용시 -i 옵션을 사용함을 의미
: git은 리베이스의 목적지가 되는 곳 아래에 복사될 커밋들을 보여주는 UI를 띄움. 각 커밋을 구분할 수 있는 각각의 해시들과 메시지도 보여줌
:드래그 & 드롭도 가능하고, pick 토글 버튼으로 원하지 않는 commit은 뺄 수 있음
:git rebase -i '최종 목적지 위치'
사이트: https://www.youtube.com/playlist?list=PLRx0vPvlEmdD5FLIdwTM4mKBgyjv4no81
git pull
: git fetch와 git merge를 한꺼번에 수행가능하도록 함
: 협업 중인 remote repo의 코드를 local 데이터와 동기화하려는 경우 자주 사용
pull request(PR) in github
: 해당 프로젝트에 대한 참여 권한이 없는 경우라도, github의 pull request를 통해 open source에 기여할 수 있음
: 여러 개발자가 협업 시에도 최종 master에 merge 전에 컨펌 절차를 통해 merge 여부를 결정하도록 하기 위해 활용 가능
git commit --amend
: commit을 완료했는데, 완료된 commit에 미처 포함시키지 못한 내용이 있다면, --amend 옵션을 통해 수정 가능
remote 저장소와 local 저장소의 소스 코드 내용이 달라졌을 때(예를 들어, reset등을 통하여 과거 commit으로 돌아가거나, 협업 중 push 전에 누군가 remote 코드를 수정한 후 master에 다른 branch를 merge하려고 하는 경우), push가 안되는 오류 발생함
=> 이러한 경우에는 git push -f
를 통해 강제로 push할 수 도 있고, remote의 코드를 pull 한 다음 다시 commit, push 하여 해결해야 함
=> conflict(충돌) 하는 경우, 해당 파일 내에 다른 부분이 각각 표시되는데, 여기서 하나로 수정한 후, 다시 commit, merge 하면 해결 가능
https://youtu.be/yRjc6mmRol4?list=PLRx0vPvlEmdD5FLIdwTM4mKBgyjv4no81&t=264
git remote add 저장소명 URL주소
: 새로운 remote repo를 생성
: remote show 저장소명
(저장소 정보 보기), remote remove 저장소명
(저장소 삭제), remote -v
(저장소 리스트 정보 보기), remote rename oldname newname
(저장소명 변경)
git log
: commit에 대한 정보, history를 확인
README.md 파일
: 코드에 대한 소개, 사용 방법등을 기재
: md는 markdown의 약자로서, 이 형식에 의해 github페이지 내에서 바로 작성 및 업로드 가능 (velog와 거의 동일)
git archive --format=zip master -o MASTER.zip
: archive 명령을 통해, git 폴더(메타데이터 등 포함)을 제외한 소스코드 파일만 압축할 수 있음
git rebase -i HEAD~3
: 현재 commit 위치로부터 위로 3개까지 interactive 창을 띄워 수정
: 과거의 특정 커밋을 찾아 정보를 변경하거나, 커밋 간 순서를 변경하거나, 삭제 등 모든 commit 수정을 자유로이 할 수 있는 굉장히 유용한 기능