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 병합이 끝나고 해당 브랜치가 더는 필요 없을 경우 삭제를 진행해주면 된다.

 

   한번쯤 회사에서 문서를 작성하다 보면 완성됐다 할지라도 수정사항이 꼭 발생하기 마련인데 그때 마다 기존의 문서를 지우는 게 아니라 다른 이름으로 저장해본 경험은 누구나 있을 것이다. 그게 꼭 회사가 아니더라도 말이다. 이전의 문서가 더 나았거나, 혹은 어디를 수정했는지 확인하기 위해서 필요한 이 기록들은 개발 환경에서도 똑같이 필요한데 이번에 새로 배우게 된 깃(git)이 바로 그러한 역할을 해준다.

 

   본격적으로 깃 허브에 입문하기에 앞서 깃이란 구체적으로 무엇인지, 어떤 방식으로 동작하는지, 필요한 이유는 무엇인지에 대한 것을 알기위해 깃 배쉬(Git Bash) 프로그램을 활용해 동작 방식을 살펴보게 되었다.

 

   1. 깃 저장소 만들기   

   말 그대로 파일이 수정된 기록(history)을 남기려면 이를 저장할 보관소가 필요하다.

 

User@USER-UBADO699SH MINGW64 ~ 물결(~) 표시는 현재 위치를 나타낸다.
상대 경로를 기준으로 하고 있다.
$ cd ~/tistory_up cd는 폴더를 바꾸기 위해 사용되는 명령어다.
현재 위치에서 tistory_up 폴더로 이동한다.
$ ls -al ls 명령어는 현재 위치에 있는 파일과 폴더 리스트를 보여준다.
마이너스(-) 연산자 뒤에 오는 것은 해당 명령어의 속성을 나타낸다.
여기서 -al는 숨겨진 파일과 폴더 및 상세정보를 나타내게 한다.
(생략) Sep 30 17:51 ./
(생략) Sep 30 17:51 ../
온점 한 개(./)는 현재 위치, 온점 두 개(../)는 상위 폴더를 나타낸다.
$ git init History를 남길 깃의 저장소를 해당 폴더에 생성한다.
.git 폴더가 생성되며, 기본적으로 숨김처리가 되어있다.
~/tisutory_up (main) 깃이 생성되며 main 브랜치로 지정된 상태다. 앞으로 해당 위치에 새로운 파일이 나타나면 이를 감지하거나 파일의 변동사항을 추적하여 명령어를 통해 사용자에게 알려줄 수 있다.
.git History가 작성될 폴더가 생겼다.
숨김처리가 된 파일이나 폴더 앞에는 온점이 붙는다.

 

 

 

   2. 버전 만들기   

   파일을 수정하고 저장할 때마다 기록을 남기고 저장하게 되는데 그 때마다 수정된 최종안이 최신 버전이 된다.

 

$ git status 깃의 상태를 확인할 수 있다.
On branch main 현재 main 브랜치에 위치하고 있음을 나타낸다.
No commits yet 아직 커밋(버전 만들기)을 진행 할 파일이 없음을 나타낸다.
파일은 스테이징 상태가 되어야 커밋을 진행할 수 있다.
즉, 스테이지에 올라온 파일이 없다는 뜻이다.
Untracked files : track상태가 아닌 파일이 존재함을 나타낸다.
(track 상태 : 깃이 파일을 추적하고 있음을 나타냄)
$ git add text1.txt track 상태로 만들기 위해 commit을 진행해야 한다. 고로 작업트리에서
스테이지로 옮겨주기 위해 add 명령어를 사용하여 Untracked 상태인 파일을 스테이지로 이동시킨다.
Changes to be committed : 스테이지에 파일을 추가하자 Untracked 상태에서 track 상태로 바뀌며
commit 할 준비가 되었음을 알려준다.
$ git commit -m "ver.1" commit을 통해 해당 파일의 버전을 생성한다.
-m은 메세지를 나타내며 큰따옴표 내에 작글을 주석처럼 쓸 수 있다.
$ git log commit이 진행된 파일의 History를 확인할 수 있다.
현재 한 번의 commit을 진행했기 때문에 하나의 내용만 존재한다.

 

 

 

   2-1. 버전 만들기 (스테이징과 커밋 한꺼번에 처리하기)   

 

modififed : track상태인 파일의 변경 사항이 감지되었다는 뜻이다.
이는 새 버전을 만들어야 하므로 다시 스테이징 - 커밋 과정을 거쳐야 한다.
$ git diff 커밋을 진행하기 전 파일의 변동 사항을 살펴볼 수 있다.
$ git commit -am "ver.2" 한번 track상태가 된 파일은 add - commit 과정을 commit 명령어 하나로
실행할 수 있다. 속성 -a(add)m(messege) 를 통해 스테이징 - 커밋을
동시에 처리할 수 있다.
(HEAD -> main) HEAD는 최신 버전을 나타낸다, 즉 main 브랜치의 최신 버전은 ver.2가 된다.

 

+ Recent posts