3. 파일 수정 되돌리기 (restore)   

# git status ~ # git diff text1.txt 파일에 3을 지우고 three로 바꾼 사실을 나타낸다.
변동사항이 생겼으니 새 버전을 위한 커밋을 요청하고 있는 중이다.
$ git restore text1.txt 해당 변경 사항을 다시 ver.2에 기록된 문서로 되돌리고자
restore 명령어를 사용했다.
$ cat text1.txt cat - 텍스트 파일을 읽어주는 명령어
사용하니 three로 바꿨던 부분이 다시 3으로 돌아와있다.

 

 

 

   4. 스테이징 상태를 작업트리로 되돌리기   

$ git status ~ $ git add text2.txt 파일을 생성 후 상태를 확인하자 Untracked 상태를 알려준다.
commit을 진행하기 위해 스테이징 상태로 만들었다.
$ git status 상태를 확인하면 스테이징 상태라는 것을 알 수 있다. 하지만 다시 파일을 수정하고 올리고 싶을 때, 이 스테이징 상태를 취소해야 한다.
$ git restore --staged text2.txt 수정된 파일을 되돌린 것 처럼 restore 명령어를 사용하고 속성으로 --staged
를 추가한다. 이는 스테이지 단계에서 작업트리로 되돌린다는 뜻이다.
$ git status 다시 상태를 확인 해보면 해당 파일이 Untracked 상태로 돌아와있다.

 

 

 

   5. 최신 버전(커밋) 삭제하기   

$ git diff ~ $ git commit -am 변동 사항을 확인하고 바뀐 파일의 버전을 업데이트 하기 위해 커밋을
진행했다.
$ git log "ver1-2" 버전으로 HEAD가 업데이트 된 것을 확인했다.
하지만 다시 이전 버전으로 돌아가야 하는 일이 발생했다고 치자.
$ git reset HEAD^ 현재 HEAD(최신) 버전을 삭제한다.
$ git log "ver1-1" 버전이 HEAD를 가지며 최신임을 알려주고 있다.

 

 

 

   6. 특정 버전(커밋)으로 되돌리기   

$ git log 총 4개의 버전이 남아있고, 제일 최신의 버전은 네번째 버전이다.
$ git reset --hard (commit hashcode) 두번째 커밋으로 돌리기 위해 reset 명령어와 함께 --hard 속성에서
돌리고자 하는 커밋의 해쉬값을 복사하여 붙여넣는다.
$ git log 기록을 확인해보면 세번째, 네번째 커밋은 삭제되고 두번째 커밋이 최신
이라는 뜻으로 HEAD를 가리키고 있다. 이후 파일을 살펴보면 두번째
반영 되었던 내용이 출력된다.
reset 명령어는 커밋을 삭제하여 최신버전을 바꾸는 명령어다.
즉 해쉬값은 되돌아갈 버전의 값을 가져와야 한다.

 

 

 

   7. 커밋 변경 이력 취소하기 (log에 기록은 남겨두기)   

$ git log 총 3개의 커밋이 존재하며, 제일 최신 커밋의 메세지는 "ver.3" 이다.
$ git revert (commit hashcode) "ver.3" 커밋은 남겨두되, 이전 버전으로 돌아가기 위해서 revert 명령어를
사용한다. 해쉬값은 남겨둘 커밋의 해쉬값을 가져와야 한다.
Revert "ver.3" revert 명령어를 실행하면 기본 편집기가 나타나며 필요한 부분을 수정할 수
있다. 여기서 ver.3의 커밋은 남겨두되, 이전에 존재하는 ver.2의 커밋을 복사
해서 새로운 커밋을 생성하는 것이다. (파일의 내용도 ver.2의 내용을 가져온다.) 

기본 편집기에 메세지나 필요한 부분을 수정하려면 키보드에서
I : 입력 가능한 상태 / ESC : 편집기 빠져나오기 / :wq : 편집기 종료
$ git log 다시 History를 확인해보면 기존에 가지고 있던 3개의 커밋은 그대로 두며
새로운 커밋이 생성되어 있는 것을 확인할 수 있다.

 

 

 

   8. 브랜치(분기점) 이용하기   

$ git branch 브랜치명 어느 시점에서 main의 분기점을 만들어 파일을 따로 관리하기 위해 브랜치를 사용한다. 쉽게 말하자면 폴더의 개념으로, 브랜치가 생성된 기점으로부터
main이 가지고 있는 모든 파일을 가지고 또 다른 폴더를 만들어 내는 식이다.
위에서는 apple / google / ms 브랜치를 생성하였다.

$ git branch 명령어만 입력할 경우 브랜치 목록이 나타나게 되며 *표시가 있는
브랜치는 현재 사용자가 사용하고 있는 브랜치를 나타낸다.
(현재 사용자의 위치 : main)
$ git log HEAD가 가리키는 최신버전 옆에 main뿐 아니라 만들어 둔 모든 브랜치가
나타나고 있다. 현재 시점에서 새로 생성했기 때문에 모두가 같은 최신커밋을
들고 있다는 뜻이 된다.

 

$ git commit -am "work4" 현재 위치가 main인 상태에서 work 파일을 수정하고 커밋을 진행했다.
$ git log History를 확인하자, main에서 새로운 커밋을 진행했기 때문에 메인의 최신
버전은 "work 4" 로 바뀌었지만 나머지 브랜치들은 반영되지 않았기 때문에
"work 3" 버전에 머물러 있는 상태가 된다.

 

$ git status apple 브랜치 위치에서 기존 work 파일을 수정하고 apple 파일을 새로 생성했다.
상태를 확인해보면 work 파일은 수정되었고, apple 파일은 새로 만들었기 때문에
Untracked 상태인 것을 확인할 수 있다.
$ git add . 추가해야 할 파일이 많을 경우 마침표(.)를 찍으면 모든 파일을 스테이징 한다.
$ git log --oneline --branches --graph History를 확인하는데, 몇가지의 속성이 추가 된 형태다.
--oneline : 각 커밋의 History를 한 줄로 축약해서 보여준다.
--branches : 브랜치들의 커밋을 보여준다.
--graph : 브랜치들이 어떻게 뻗어가고 있는지에 관해 그래프로 보여준다.
$ git log main..apple
$ git log apple..main
브랜치 이름 사이에 마침표 두 개를 찍어 둘 사이를 비교하여 History를 출력할
수 있다. 앞에 오는 브랜치에는 없지만 뒤에 오는 브랜치에는 존재하는 커밋을
알려준다.

main..apple : main에는 존재하지 않으나 apple에는 존재하는 커밋
apple..main : apple에는 존재하지 않으나 main에는 존재하는 커밋

 

 

 

   9. 브랜치(분기점) 결합하기   

$ mkdir manual-2 ~  cd manual-2 manual-2 라는 폴더를 생성하고, 그 폴더로 작업장소를 옮긴다.
$ touch work.txt 메인 브랜치에 work 텍스트 파일을 생성한다.
$ git branch o2 ~ touch main.txt 브랜치 o2를 생성하고, 메인 브랜치에 main 텍스트 파일을 생성한다.
$ git switch o2 o2 브랜치로 전환한다. (main → o2)
$ touch o2.txt o2브랜치에 o2 텍스트 파일을 생성한다.
$ git switch main ~ git merge o2 메인 브랜치로 돌아와, o2 브랜치와 병합을 진행한다.
이후 리스트를 확인해보면 메인 브랜치에 o2 텍스트 파일이 있다.
$ git log --oneline --branches --graph 두 갈래로 나뉘었던 그래프가 합쳐지며 결합이 완료되었음을 보여준다.
$ git branch -d o2 병합이 끝나고 해당 브랜치가 더는 필요 없을 경우 삭제를 진행해주면 된다.

 

+ Recent posts