git의 관리에서 특정 폴더나 파일을 배제해야할때 .gitignore 파일 생성 gitignore 파일에 숨길 폴더명 및 파일을 기록 /aaa.html 최상위 폴더의 aaa.html파일 *.html 모든 html파일 aaa aaa란 파일 또는 폴더 aaa/ aaa란 폴더의 내용들 aaa/ *.c aaa폴더 안의 c파일들
프로젝트의 변경사항을 git에 담기 git add 파일이름 git commit -m " " git commit -ad " " >> add와 commit 동시에 하기
vim 명령어 i : 입력 esc : 입력 수정 등 끝내기 q : 종료 q! : 강제종료 wq : 저장후 종료
이전 커밋으로 돌아가기 reset : 원하는 시점으로 돌아간 뒤 이후 히스토리를 지운다 git reset --hard 해시값 id는 git log에서 나온다 다 보이지 않으면 j로 확장
revert : 원하는 시점으로 돌아가기 위한 과정을 반대로 수행한다, 히스토리는 남는다. 추가를 했다면 지우고, 지웠다면 다시 추가를하고.. git revert 해시값
유지된것을 볼 수 있음
branch 프로젝트를 하나 이상의 모습으로 관리해야 할때 여러 작업들이 독립되어 진행될 때 (팀프로젝트 등)
git branch 이름 branch를 추가한다
git branch branch list를 확인한다
git switch 이름 해당 이름의 branch로 이동한다
git switch -c 이름 해당 이름의 branch를 생성한 후, 이동한다.
git branch -m 바꿀이름 새로운이름 branch의 이름을 변경한다
이렇게 branch는 가지가 나뉘게 된다
merge 여러개의 branch를 병합한다, 각각의 branch의 변화들이 합쳐진다. a브랜치를 main으로 이동할때 1. main브랜치로 이동한다 2. git merge a를 입력
이렇게 병합이 되고 새 커밋이 추가된것을 볼 수 있다.
rebase branch의 커밋들을 대상branch로 옮긴다 branch의 커밋을 대상 branch를 하나하나 옮기는 느낌이다. a브랜치를 main으로 이동할때 1. a브랜치로 이동한다 2. git rebase main 으로 병합한다.
main은 뒤쳐져있다 최신 커밋의 상황이 main에 반영이 되지않은것 최신 브랜치와 merge를 하면 해결된다
merge와 rebase의 차이? merge는 두 브랜치의 히스토리를 볼 수 있다 히스토리가 복잡해 질 수 있다 협업 중인 팀원과 히스토리를 공유할때 사용하기 좋음
rebase는 브랜치가 일렬로 나열되므로 로그가 깔끔해진다 커밋의 해시를 변경하기떄문에 충돌이 발생할 수 있다 개인 작업시나, 원격 브랜치에 푸시하기전에 로컬에서 사용하기 좋다.
충돌 해결하기 a브랜치의 내용과 b브랜치의 동일한 파일의 동일한 위치의 내용을 바꾼다
충돌되는 내용을 보여주며, 수정할내용을 선택할 수 있게 표시된다.
깃허브 사용하기 git remote add origin (원격 저장소 주소) 로컬의 git 저장소에 원격 저장소 연결 추가
git branch -M main 기본 브랜치명을 main으로 설정
git push -u origin main 로컬 저장소의 커밋 내역들을 원격으로 업로드
github의 내용 복사하기 git clone (원격 저장소 주소)
로컬에서 깃허브로 추가하기 git push 만약 깃허브에 먼저 적용된 새 버전이 있다면 pull을 먼저 작성후, push가능
깃허브에서 로컬로 불러오기 git pull
push 할것이 있을때 pull하는 방법 git pull --no-rebase (merge방식) or git pull
분기된 후 merge된것을 볼 수 있다.
git pull --rebase (rebase방식) pull할때의 rebase는 괜찮다
강제 push하는 법
로컬에서 만든 브랜치를 원격으로 업로드하기 원격 branch 확인 git branch -a git push를 하면 에러가 난다. 에러메세지를 그대로 복사해서 붙여넣기하면 정상적으로 확인 할 수 있다.
원격에서 만든 브랜치를 로컬에서 받아보기 원격의 내용을 받아온다(병합은 하지않음) git fetch
git switch -t origin/from-remote 원격 브랜치를 로컬에 생성한 후 전환한다.
git push origin --delete from-remote 원격 브랜치를 삭제한다
git의 세가지 공간 Working Directory : untracked : add된적이 없는 파일 또는 ignore된 파일 tracked : add된 적 있고 변경내역이 있는 파일
Staging Area : git add를 통해 커밋을 위한 준비단계
Repository : 커밋된 상태
파일의 삭제와 이동 git rm : 파일을 삭제한다 삭제 및 스테이징영역으로 이동 직접 삭제할경우 add를 통해 스테이징영역으로 이동해야함.
git mv : 파일의 이름을 변경한다 변경후, 스테이징 영역으로 이동한다. 직접 변경할경우 기존 파일이 삭제되었다고 뜨며, 새로운 파일(변경된 이름)이 등록되었다고 표시된다. git add . 명령어를 사용하여 스테이징영역으로 옮겼을때, renamed 되었다고 뜨게된다.
이 이유는 git은 working directory 영역에 대한 변경사항을 확인 할 수 없어 삭제와 생성작업으로 인식하지만 스테이징 영역에서 git은 파일의 해시값을 조사하기때문에 변동사항이 없으면 renamed라는것을 인식할수 있다. git은 이름 변경 작업을 하나의 이동으로 간주하기때문.
그럼 이름을 변경한 후, 내용도 수정한다면? git은 새로운 데이터가 들어왔다는것으로 간주한다.
챗지피티의 답변
그럼 단순 띄어쓰기만 추가할 경우 어떻게 될까?
git은 renamed로 인식하게 된다.
특정한 내용만 원격 저장소에 올리고 싶은경우 git restore --staged (파일명) 을 사용한다.
reset의 세가지 옵션 reset --soft : repository > staging area로 이동 reset --mixed , reset : repository > working directory로 이동 reset --hard : 수정사항 완전히 삭제
head 현재 속한 브랜치의 가장 최신 커밋이다.
checkout 병합을 하지않고, 파일의 상태만 이전 시점으로 되돌리는 방법 git checkout^ : 한단계 되돌리기 git checkout~5 : 다섯단계 되돌리기 git checkout- : 한단계 복구하기
main이 아닌 0022316으로 되어있는것을 알 수 있다.
git이 이 부분으로 가상의 브랜치를 만들어 위치하고 있는것이라고 생각하면 된다.
HEAD를 사용하여 reset하기 git reset --hard HEAD^ : 최신 커밋에서 한단계 전으로 돌아간다.
fetch 원격 저장소의 최신 커밋을 로컬로 가져오기만함
원격의 데이터를 변경한 후 fetch를 하면, 로컬보다 앞서있는것을 알 수 있다
fetch를 하되, 원격저장소의 변경내역을 보고 싶을때 git checkout origin/main switch가 아닌 checkout으로 branch를 이동한다.
해당 명령어의 사용법을 알고싶을때 git (명령어) -h : cli환경에서 출력해준다 git (명령어) --help : 웹 사이트를 출력해준다.
커밋할때의 권장사항 한 단위의 작업을 하나의 버전에 내용파악이 가능한 메세지와 함께 커밋을 해야한다.
커밋 컨벤션 각팀의 커밋 메세지 작성관례 (팀별 자체 정의 가능) feat 새로운 기능 추가 fix 버그 수정 docs 문서 수정 style 공백, 세미콜론 등 스타일 수정 refactor 코드 리팩토링 perf 성능 개선 test 테스트 추가 chore 빌드 과정 또는 보조 기능(문서 생성기능 등) 수정
feat: 압축파일 미리보기 기능 추가 >> 새로운 기능 추가 : 추가한 내용
사용자의 편의를 위해 압축을 풀기 전에 다음과 같이 압축파일 미리보기를 할 수 있도록 함 - 마우스 오른쪽 클릭 - 윈도우 탐색기 또는 맥 파인더의 미리보기 창 >> 상세 내용