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 | 병합이 끝나고 해당 브랜치가 더는 필요 없을 경우 삭제를 진행해주면 된다. |
'아이티에듀넷' 카테고리의 다른 글
2024-10-07 :: 049 JSP 들어가기 (0) | 2024.10.07 |
---|---|
2024-10-02 :: 048 깃허브 (0) | 2024.10.02 |
2024-09-30 :: 046 깃 시작하기 ① (0) | 2024.09.30 |
2024-09-27 :: 045 프로그래머스 기초 문제 (0) | 2024.09.27 |
2024-09-26 :: 044 네트워크 (0) | 2024.09.26 |