- Git은 VCS중 하나이다.
VCS : Version Control System
- 협업할 팀원 추가
repository의 settings - Collaborators - Add People
git status: git의 상태 볼 수 있다.git log: 지난 commit 기록들을 볼 수 있고, j와 k로 스크롤 가능.git commit -am 'blahblah': 새로 추가된 파일이 없을 때만 사용 가능한 add + commit 기능의 명령어-am이다.git rm (filename): git에서 file을 삭제한다.rm : remove즉시
staging area에 올라간다.git mv (filename) (filename1): git에서 file의 이름을 변경한다.mv : move삭제+생성이 아니라 변경으로 인식하게 된다.
git restore --staged (filename): file을staged된 상태에서 다시working directory로 되돌리겠다.git restore (filename): (add가 안 된 상태에서)working directory에 올라간 내용을 다시 복구하겠다. (변경사항을 되돌리겠다)
git reset --hard (hashcode): 특정시점의 hashcode를 통해 그 특정시점으로reset한다.git reset --mixed (hashcode):add가 되기 전으로 되돌린다.많은
commit내역 중 하나만 다시 수정하고 싶을 경우 사용. default이므로 mixed를 안 써도 된다.git reset --soft (hashcode):commit되기 전으로 되돌린다.git revdert (hashcode): 특정 시점의 hashcode를 통해 그 특정시점으로revert한다.git revert --continue:revert중 충돌문제 때문에 멈춰 있던revert를 이어서 실행한다.git revert --no-commit (hashcode):revert와 함께 다른 추가작업을 시행했다면commit도 해줘야 하지만, 이 명령어는revert와commit을 동시에 할 수 있게 한다.
git branch (branch name): branch를 생성한다.git branch: branch 목록을 확인한다.git switch (branch name): branch를 이동한다.git switch -c (branch name): 새 branch를 생성하고 이동한다.git branch -d (branch name): branch를 삭제한다. (-D (대문자)옵션을 사용할 경우 다른 branch로 적용되지 않은 커밋내용을 무시하고 강제 삭제한다.)git branch -m (이름변경할branch) (변경될branch): branch이름을 변경한다.git switch (branch name): 다른 branch로 이동
git merge (branch name): 현재 위치한 branch로 (branch name)branch를merge한다.git rebase (branch name): 현재 위치한 branch를 (branch name)branch를 rebase한다.merge와 반대이다!git merge --abort:merge중 충돌이 발생하여 더 이상merge를 진행하고 싶지 않을 때merge를 중단시킨다.git rebase --abort: 위와동git rebase --continue: 충돌내용을 수정한 후git add .으로 변경사항을 추가하고 나머지rebase과정을 계속 진행시킨다.
git push -u (branch name):-u:: 현재 branch와 명시된 branch 기본연결, 그리고pushgit push --force: 협업도중이 아닌 혼자 작업할 때만 사용할 것 로컬의 작업 내용을 원격에 강제로 적용한다.git push -u origin (new branch): 원격에 새 branch를 생성하고 거기에 현재 branch의 내역을push까지 하겠다.git branch -a: 로컬뿐만 아니라 원격의 branch까지 볼 수 있다. (remote에만 있는 branch는 볼 수 없다.)git fetch: 원격의 변경사항을 확인 할 수 있다. 이 명령 이후라면 로컬에서 원격에만 있는 branch도 확인할 수 있다.git switch -t origin/(from remote): 로컬의 현재 branch를 원격의 branch와 동일시 하겠다? (부정확 정보!!)git push (origin) --delete (remote branch name): remote의 branch를 삭제하는 명령어.
Reset: 특정 과거 시점으로 돌아간 후 그 이후의 기록들을 모두 날려버리는 것.Revert: 특정 과거 시점(A)에 대한 역실행 commit 내역(-A)을 추가한 다음, 결과적으로 그 특정 시점(A)으로 돌아가는 것.이 경우, 그 시점(A) 이후(B, C, ...)의 다른 내역들은 유지된다.
Merge: 두 가지를 이어붙이고 그 과정에서commit하나가 더 생겨난다.- history에 branch의 흔적을 남긴다.
- branch의 사용내역들을 남겨둘 필요가 있으면
Merge를 사용하라. merge도 하나의commit이기 때문에reset으로 되돌리기가 가능하다.- 충돌 발생 시 충돌부분을 수정한 후 다시
commit한다.
<git_fig1>
Rebase: 작업한 내용을 다른 곳의 뒤에 이어붙이는 작업이다.- history에 흔적을 남기지 않는다.
- history를 깔끔하게 만드는 것이 중요하다면
Rebase를 사용하라. - 협업 중에는
Rebase를 사용하는 것을 지양하라. rebase한 후에는merge를 통해서 rebase branch를 합치고 제거해주어라.- 충돌 과정 해결한 후 원래 main과 비교하여 변경사항이 없다면
commit하지 않는다.
<git_fig2>
git pull --no-rebase: 팀원과push과정에서 충돌이 났을 때 먼저pull을 하는 과정에서merge방식으로 충돌을 해결하고자 하는 것.git pull --rebase: 팀원과push과정에서 충돌이 났을 때 먼저pull을 하는 과정에서rebase방식으로 충돌을 해결하고자 하는 것. (협업시 사용 OK)로컬에서 작업할 때 이미 공유된 것들을
rebase를 사용하여 올리지 말라는 것 뭔가pull받는 상황에서rebase는 괜찮다! 는 뜻
- 스냅샷방식
Github는 델타방식과 스냅샷방식 중 스냅샷방식(현재 최종파일의 변경사항 확인)을 채택했다.
- 분산 버전 관리
중앙집중식 버전 관리 vs 분산 버전 관리 중앙집중식은 원격저장소에 의존적이다. 중앙에서 다운받은 파일로만 작업가능 분산 버전 관리는 모든 구성원들이 Git의 상태까지 공유한다.
<git_fig3>
- Working directory
- 수정및 변화내용들이 즉시 반영된다.
add를 통해Staging Area로 넘어간다.
- Staging Area
- 이 변화를 반영한다.
Repository로 이동하기 전의 상황 - 필요한 파일만
Repository로 넘기기 위해
- 이 변화를 반영한다.
commit을 통해Repository로 넘어간다.
- Repository
- .git directory 라고도 한다.
1. soft
2. mixed
3. hard
