이전 커밋의 새로운 커밋을 생성 시킴
revert
를 사용해 아래와 같이 만들어 졌다면
커밋1 - 커밋2 - 커밋3
커밋2에서 revert
를 통해 커밋3이 생성, 그리고 이 커밋3은 커밋1과 같다, 커밋1의 내용을 옮겨왔기 때문
안정성은 있으나, 깃 로그가 지져분해지고, 가독성이 안좋아질 수 있다.
revert
를 이용할때는 취소할 커밋을 적어야한다.
git revert <취소할 커밋>
본인이 어디까지 리셋을 하고 싶은지에 따라 3개의 선택지가 있습니다.
reset
을 사용할때는 되돌아갈 커밋을 적어야합니다.
git reset --soft <되돌아갈 커밋>
커밋을 했다는 사실만을 되돌립니다, 커밋을 했다는 로그, 스태이징을 했거나, 작업디렉토리에서 변경로그는 남습니다.
스태이지에 올린 것 까지 살아있음
reset
의 디폴트 옵션
커밋을 되돌리고, 스태이징을 한 로그까지 되돌립니다. 하지만 작업디렉토리에서 변경사항에 대한 로그는 남아 있습니다.
작업 디렉토리에 변경사항이 있는 것 까지 살아 있음, 스테이지에 올린 사실은 없어짐
모든 작업사항의 로그까지 돌립니다.
작업디렉토리, 스테이지, 커밋 모두 되돌립니다.
변경사항을 임시저장할 때 사용
git stash -m "<메시지>"
stash
목록을 확인할때
git stash list
위와 같이 입력하면 임시저장한 항목들이 나오게되는데 stash@{숫자}
와 같이 나온다.
숫자가 0에 가까울 수록 최근에 작업한 stash
이다
임시저장한 stash
를 적용하기
git stash apply <stash>
임시 저장된 작업 삭제하기
git stash drop <stash>
깃의 존재 이유
브랜치는 버전을 여러 개의 흐름으로 관리하는 방법
git branch
현재 브랜치 목록을 보여준다
git branch foo
foo 라는 이름의 브랜치를 만든다
git checkout foo
foo 라는 이름의 브랜치로 작업환경을 옮긴다.
git checkout -b bar
bar 라는 브랜치를 만듦과 동시에 작업환경을 옮긴다.
브랜치를 병합하는 것을 merge
라고 한다.
병합하기전에 checkout
으로 마스터 브랜치로 이동해야한다.
git merge <병합할 브랜치 이름>
마스터 브랜치가 가만히 있었을 경우
마스터 브랜치가 3개까지 커밋이 쌓여있고, 거기서 foo 브랜치가 2개 까지 커밋이 쌓였을 때, 병합하는 경우 마스터 브랜치 3개 + foo 브랜치의 최신커밋 1개가 쌓이는게 아니라 마스터 브랜치 3개 + foo 브랜치 2개가 쌓여 총 5개가 된다.
즉 브랜치의 마지막 커밋이 합쳐지는게 아니라 작업했던 모든 커밋이 합쳐진다.
bar 브랜치가 작성되는 동안 마스터 브랜치가 가만히 있지 않았을 경우
마스터 브랜치가 3개까지 쌓이고 거기서 bar 브랜치가 나와 커밋이 3개까지 쌓일 동안 마스터 브랜치도 2개의 커밋이 쌓였다면 빨리감기 커밋을 사용할 수 없다.
이 경우 bar 브랜치의 마지막 커밋과 마스터 브랜치의 마지막 커밋을 병합한 새로운 커밋이 마스터 브랜치에 추가된다.
같은 위치를 다르게 수정한 경우 발생
어떤 브랜치의 내용을 선택할지 결정하고 다시 커밋
>>>>>head
master
======
foo
>>>>>
이런식으로 나올텐데 여기서 브랜치 내용을 선택하는 방법으로는 적용하고자 하는 브랜치의 내용을 제외하고 모두 삭제하면 된다.
mater
이런식으로 마스터 브랜치의 내용을 제외한 표시막을 포함한 모든 내용을 제거하면 마스터 브랜치의 내용으로 병합이 진행된다.
fork란
계정으로 복제해오기, 내 계정으로 기여하려는 저장소가 복제가 됨, 원본을 클론 해봐야 푸시가 불가능 하기 때문에 포크해와서 클론 받는게 좋다.
git push origin <브랜치 이름>