2.1 변화를 타임캡슐에 담아 묻기
1) 프로젝트의 변경사항을 타임캡슐(버전)에 담기
- git status로 확인해보면 아래와 같이 나온다.
-> no commits yet => 아직 commit(번전 / 타임캡슐)이 없다. 즉, 버전이 없다는 뜻이다.
-> "untracked": 아직 깃이 관리한 적 없는 파일을 말한다.
- git add "파일이름"
- git add . : 모든 파일을 깃에 담는다.
-> git status로 확인하면 "change to commit": 묻을 준비가 됐다.
-> 각 파일을 다른 버전에 넣을 수도 있다.
2) 타임캡슐 묻기
- commit: 새로운 버전으로 만든다.
- git commit를 입력하면 아래와 같이 뜬다. 마우스가 쓰이지 않던 시절에 쓰던 vim모드가 뜬다.
- 'i'를 눌러서 insert 모드를 바꾼 다음, "FIRST COMMIT"을 입력한다.
-> esc + :wq로 빠져나온다. (저장하고 빠져나와야 커밋이 된다. )
-> 빠져 나오면 VScode 창의 좌측 git_practice 폴더 아래에 파일들의 색이 초록 -> 흰색으로 바뀐 걸 볼 수 있다.
-> 버전이 저장됐기 때문에 현재 버전에서 어떤 변화가 없다는 뜻.
- git commit를 입력한다.
-> git commit를 한 번 더 입력하면 "nothing to commit"
-> first commit 상태 현재 버전에서 어떤 변화가 없다.
- git log 입력
-> 모든 커밋마다 있는 고유한 문자열이 출력된다.
-> "FIRST COMMIT" - 첫번째 버전이 저장된 것을 볼 수 있다.
- 커밋 메시지 까지 함께 작성하려면??
-> git commit -m "FIRST COMMIT"
3) 다음 변경사항들을 만들고 타임캡슐에 묻기
(1) lions 파일을 삭제한다.
(2) tiger의 매니저를 Donald로 바꾼다. =>'M' 표시 (수정되었다는 뜻)
(3) 새로운 파일 leopards.yaml을 만든다. => 'U' 초록색 표시
<hide/>
team: Leopards
manager: Luke
members:
- Linda
- William
- David
(4) git status로 확인하면,
아래와 같이 삭제한 파일과 수정된 파일 새로운 파일이 뜬다.
(5) git diff로도 확인 가능하다. (변경 사항 내용을 구체적으로 볼 수 있다.)
- j 누르면 올라가고, k 누르면 한 줄씩 내려간다.
(6) 캡슐에 담기
- git add . 입력한다.
- git status 로 확인하면 변경된 사실이 모두 캡슐에 담긴 것을 볼 수 있다.
- git commit -m "Replace Lions with Leopards" 입력하고 git log를 확인하면
-> 두 개의 버전이 만들어진 것을 볼 수 있다. 소스트리에서도 확인 가능하다.
- add와 commit을 한번에 하려면? git commit -am "메시지"를 입력한다. (커밋 전에 add로 담을 필요 없다. )
-> 단, 새로 추가된 파일(untracked)이 없을 때만 한정된다.
4) 다음 강을 위한 준비
(1) 첫 번째 추가 커밋
- Tigers에 George를 추가하고 커밋 메시지 "Add George to Tigers"
-> 소스트리에서 바뀐 내역을 확인할 수 있다.
(2) 두 번째 추가 커밋
- 아래와 같이 새로운 cheetas 파일을 만든다.
- git commit -am " Add team Cheetas"
- 아래와 같이 4개의 버전이 만들어진 것을 볼 수 있다.
(3) 세 번째 추가 커밋
- cheetas 파일을 삭제한다.
- leopard의 감독을 Nora로 바꾼다.
- 새로운 팀을 만든다.
<hide/>
team: Panthers
manager: Sebastian
members:
- Violet
- Stella
- Anthony
- 커밋 메시지: "Replace Cheetas with Panthers"
- git add .
- git commit -m 'Replace Cheetas with Panthers'
-> 다섯 개의 commit내역을 확인할 수 있다.
- 이처럼 5개의 버전이 있으면 성공적으로 수행한 것이다.
-> 5개의 각 커밋은 묻어놓은 타임캡슐과도 같다.
2.2 과거로 돌아가는 두 가지 방법
(1) Reset: 시간을 과거로 되돌린다. 과거로 돌아간 다음 이후의 행적은 히스토리에서 지워버린다.
(2) Revert: 변경된 파일에 대해 변화를 거꾸로 수행하는 캡슐을 하나 넣음으로써 과거의 상태로 돌아간다.
Note)
- 개발자들은 Git을 사용해서 코드를 공유하고 협업하는데 한 번 공유 공간에 올라간 내역을 reset하면 협업 시 문제가 발생한다.
-> 그걸 기반으로 작업한 다른 사람들의 코드와 심각한 충돌을 일으키기 때문이다.
- 따라서, 한 번 공유된 commit들은 Revert를 사용해서 되돌려야한다.
2.3 과거로 돌아가기 실습
(1) 실습 전 내역 백업하기
1) .git 폴더를 다른 곳에 백업해놓는다.
2) Git_practice폴더의 .git폴더를 삭제한다.
3) 소스트리를 보면 아래와 같이 창이 뜬다.
4) git status를 보면 git이 관리하는 repository가 아니라는 메시지가 뜬다.
--- 오류 ---
5) 백업해둔 폴더를 다시 Git_practice에 복사하고나면, 소스트리에서도 아까 만들어 놓은 5개의 커밋을 볼 수 있다.
(2) reset 으로 돌아가기
- 마지막 커밋에서 leopards를 수정하고 매니저를 Nora로 바꿨다. 그리고 panthers를 추가하고 cheetas를 삭제했다.
- 이전 커밋인 Add team Cheetas로 돌아가려면?
-> git log 를 통해 "Add team Cheetas"의 커밋 번호를 확인한다.
- git reset --hard 26fe1a9c55 를 입력한다. (앞 부분만 입력해도 된다.)
-> 현재 "Add team Cheeta" 상태로 돌아간 것을 확인할 수 있다.
-> 그리고 마지막에 추가했던 파일인 panthers 파일이 삭제된 것을 볼 수 있다.
-> leopards의 매니저도 Luke로 돌아간 것을 볼 수 있다.
-> 마지막에 지웠던 cheeats 파일도 다시 생긴 것을 볼 수 있다.
- 즉, 파일의 생성, 추가, 삭제가 모두 과거로 돌아간 것이다.
(2) -1 첫번째 커밋으로 돌아가려면?
1) git log로 조회한다.
2) FIRST COMMIT의 hash를 확인한다.
-> git reset --m hard 002ddcf80f3
3) git log로 확인하면 첫 버전으로 돌아간 걸 볼 수 있다. 소스트리에서도 확인 가능
(3) reset 하기 전 시점으로 복원하려면?
- .git을 삭제한다.
- 백업해둔 .git폴더를 다시 붙여넣기한다.
-> 소스트리를 보면 5개의 커밋 내역이 다시 돌아온 걸 볼 수 있다.
- git status를 보면 아래 변화를 볼 수 있다.
-> ??????????
- git reset --hard (돌아갈 커밋 해시): 해시가 없으면 마지막으로 묻힌 타임캡슐 상태로 돌아간다.
- git status로 확인하면 아래와 같이 확인 가능
-> lions 파일을 새로 만들어진 파일로 인식한다. 파일 삭제한다.
- 또 다시 git status로 확인하면 더이상 수정할 게 없이 완벽하게 다섯 번째 커밋 "Replace Cheetas with Panters"상태로 돌아와있다.
(4) revert로 과거의 커밋 되돌리기
- git log로 "Add George to Tigers"의 커밋을 찾는다. => fbdb7506f16861
- git revert fbdb7506f16861 입력
아래와 같이 나오며 그대로 저장해서 빠져나온다.
- 그러면 아래와 같이 새로운 커밋이 생긴다. Add George to Tigers를 반대로 실행하는 커밋이 새로 생겨난 것이다.
- replace Lions with Leopards의 해시를 복사해서 07f3eade717859db4492a66157f9bf7db7e956f9
-> git revert 07f3eade717859db4492a66157f9bf7db7e956f9
-> "Reverting"
-> 힌트: git에서 add / remove를 쓰고나서 revert를 continue해라
- git rm leopards.yaml .. 삭제한다.
- git revert --continue
-> :wq로 빠져나온다.
- 소스트리를 확인한다.
-> 성공적으로 revert가 이뤄진 것을 볼 수 있다.
-> lions파일이 생겨나고 John으로 매니저가 바뀌었다.
- Replace Cheetas with Panthers의 커밋을 복사한다.
- git reset --hard 커밋번호
- > 이전
-> 이후
- Add George to Tigers 커밋을 복사한다.
- git revert --no-commit fbdb7506f168616cda36
-> 아직 커밋은 되지 않은 상태가 된다. 다시 커밋을 해줘야한다.'
- git status을 보면
- git reset --hard
-> 마지막 커밋의 상태로 되돌아간다.
-> Replace Cheetas with Panthers 상태로 돌아간 걸 확인할 수 있다.
2.4 Source Tree로 진행해보기
1) 변경 사항 만들고 커밋하기
- leopard를 삭제한다.
- gitignore에 *.config를 추가한다.
- hello.txt 파일을 추가한다.
- 위 변경 사항을 저장하고 소스트리에서 모든 스테이지에 올리기를 선택한다.
- 소스트리 창 좌측 상단에 커밋+ 버튼을 클릭한다.
- 창의 아래 메시지 박스에 커밋 메시지 "Commit with SourceTree"를 입력하고 커밋을 누르면 끝난다.
2) revert
- Add George to Tigers의 수정사항을 되돌려보기
- 아래 창과 같이 커밋 되돌리기를 클릭한다. (팝업: 해당 커밋을 거꾸로 하는 새로운 커밋을 추가하겠는가? -> 예)
-> 그러고 나서 Tigers 팀에 George가 없어진 걸 볼 수 있다.
3) reset
- 소스트리의 Replace Cheetas with Panthers 에 대해 아래와 같이 실행한다. reset 실행
- 아래의 선택지에서 hard를 선택한다. 알림 예 선택
-> 그러고 나면 hello.txt 파일도 사라지고 다른 부분도 이전으로 돌아간 걸 확인할 수 있다.
출처: 얄팍한 코딩사전
https://www.inflearn.com/course/%EC%A0%9C%EB%8C%80%EB%A1%9C-%ED%8C%8C%EB%8A%94-%EA%B9%83
'컴퓨터 과학 > [인프런: 얄팍한 코딩사전] Git & GitHub' 카테고리의 다른 글
Chapter 05. Git 보다 깊이 알기 (1) | 2022.10.05 |
---|---|
Chapter 04. GitHub 사용하기 (0) | 2022.10.04 |
Chapter 03. 차원 넘나들기 (0) | 2022.06.03 |
Chapter 01. Git 시작하기 (0) | 2022.06.02 |
Git 맛보기 (0) | 2022.06.02 |