git int
git config
git config --list
브런치 목록확인
git status
현재 깃의 상태를 나타냄.
git add
수정하거나 다룰 파일을 등록하는 과정. 한번등록하면 새로운 파일이 아닌이상 다시 add 할 필요는 없음
project관련 파일들을 모두 add함.
git commit -m "설명"
git remote add origin URL
git push
현제 깃의 commit된 것들을 remote저장소로 업로드 하는 과정.
git push -u "현재 저장소" "원격저장소"
remote 저장소로 등록한 github site에 실제 적용된 모습.
파일수정
main.c 파일수정 후 git status를 통해 main.c가 수정중된 상태라는 것을 확인할 수 있음.
git diff
그 후 git diff를 통해 어디가 수정된것인지 자세히 확인 가능함.
git diff : 현재 작업디렉토리와 staged간이 차이를 비교.
git diff --staged : 현재 staged와 최근commit간의 차이를 비교
git diff commitid :commitid 해당 commit들 간의 차이를 비교.
현재 untracked 상태인 나머지 파일들을 모두 add한 후
상태 상태를 확인해보면 new file: 로 새롭게 등록됨을 알 수 있음.
그 후 make clean 과 a.out와 main을 삭제한 후 다시 commit을 해본다음
다시 git diff로 커밋간의 상태수정변화를 확인할 수 있다.
git log
지금까지 업데이트된 commit의 히스토리를 보여줌.
--stat옵션을 이용해서 각 commit의 통계를 확인할수 있음. 어느 파일이 얼마나 수정되거나 추가되거나 했는지에 대한 것. +-,
원격저장소의 파일 지우기
github site를 원격저장소로 예를 든다면, 이와 연동된 로컬저장소에서 파일을 지우게 되면 원격저장소의 파일은 삭제되지않는데 이를 해결하기 위해서는 git rm 명령어를 사용해야한다.
더 이상 a.out과 main을 track하지 않는것을 확인할 수 있다.
add, commit push 취소하기
git reset HEAD [file]
뒤에 파일명이 없으면 add한 파일 전체를 취소한다.
git reset HEAD^
commit 취소.
text.txt파일을 수정 수 add하면 현제 modified 즉, staged에 올라간것을 확인할 수 있음.
이상태에서 git reset text.txt를 통해 상태를 staged상태에서 add되지 않은 modified상태로 바꿀 수 있음.
즉, add취소.
git reset HEAD~숫자
git reset HEAD~2를 통해 현재 commit으로 부터 2개 전의 commit으로 돌아감. 즉 ver3과 ver2는 없어짐.
하지만 commit한 최종 이력은 적용이 된 상태로 ver3, ver2가 사라지는 것임.
git revert
과거의 버전들중에 특정버전 또는 여러개의 버전을 최신의 버전으로 다시 불러오는 명령.
*git reset 과 git revert의 차이
두 명령어 모두 이전의 버전을 불러온다는 공통점이 있지만
reset은 불러오고자 하는 이전버전을 불러온 후 그 후의 버전들을 완전히 삭제하고 최신버전이었던 commit의 내용을 적용시킨다.
반면 revert는 삭제같은 것 없이 과거의 해당버전만을 꼭 잡아서 다시 불러오는 작업이다.
따라서 상황에 맞게 reset과 revert 각각의 잘 사용해야 한다.
git commit --amend
commit의 이름을 잘못 적었을 경우 수정하는 방법.
push취소.
위의 2개를 응용하여 commit을 되돌린 후 다시 push하는 방법으로 push를 취소한다.
git checkout 파일명
현제 수정하고 있는 파일에 대해 이전 commit버전을 불러올때
CO-WORK
서로다른 버전으로 만들다가 적절한 시점에서 합치는것, 합치는 부분 merge 나누는 부분 branch.
branch
기존 버전에서 새로운 업데이트 버전을 만들고 싶을때 branch로 시험삼아 만든 후 마음에 들면 master에 적용함.
내가 어떤 브런치에 작업하고 있는지, 내 위치를 확인하는 것이 굉장히 중요함.
git branch "이름"
새로운 브런치를 생성할 수 있음.
git branch
자신이 어떤 브런치에 있는지 확인하는 방법
git checkout "브런치이름"
현재 브런치를 나와서 해당 브런치로 이동하는 명령.
git merge "브런치이름"
해당브런치를 현재브런치에 병합하는 명령.
merge를 할때를 merge되고자 하는 브런치에서 해당명령을 수행하는 것이 중요함. 현재 브런치의 위치!
*merge충돌*
만약 브런치와 master에서 같은 이름의 파일을 다른내용으로 만든 후,
merge할 경우 충동이 발생함!!
이 경우 해당 파일의 내용이 수정되는데
수정해서 다시 commit할 수 있도록 파일이 수정됨.
#시나리오#
아래 그림과 같은 작업 수행.
master에서 ver1,2,3 설정.
second 브런치를 만들어 이동.
new.txt를 만들어서 ver4 커밋.
그 후 다시 master브런치로 돌아가서
old.txt와 old2.txt를 만들어서 각각 ver5, ver6를 만듦.
다시 second로 이동하여 new2.txt를 만들어 ver7 commit.
master로 이동하여 second merge를 진행함. 이때 merge를 통해 ver8이 만들어짐.
second로 이동 후 old3.txt를 만들어 마지막버전9를 만듦.
최종 log graph모습
git rebase
git rebase -i --root 을 입력하면 다음과 같은 편집창이 뜬다.
아래 설명글에 나와있는 작업하고 싶은 키워드를 통해 위쪽의 commit 키워드들을 수정해주면 된다.
reword에 경우 또 다른 에디터 창이 열리게 된다.