- 서버를 이전 상태로 복구, git 사용법
- reset, merge, rebase 등의 모든 동작을 이전 시점으로 되돌리기
* 변경 이력 보기
git reflog <== 전체 이력을 볼수 있음, 복구에 사용
- 결과 예
0236c32 HEAD@{14}: commit: 2
1fe4b73 HEAD@{15}: commit (initial): 1
* 되돌리기
- git reset --hard 명령이용
- 예1) hash값 으로 복구
git reset -- hard 1fe4b73
- 예2) 최종 커밋 1개 이전 상태로 되돌림
git reset --hard HEAD~1
- 예3) HEAD값으로 복구
git reset --hard HEAD@{15}
//=========================
* HEAD, index, Working directory(work folder)
Git 도구 - Reset 명확히 알고 가기
https://git-scm.com/book/ko/v2/Git-%EB%8F%84%EA%B5%AC-Reset-%EB%AA%85%ED%99%95%ED%9E%88-%EC%95%8C%EA%B3%A0-%EA%B0%80%EA%B8%B0
- HEAD : 마지막 커밋 한 상태
HEAD~ = HEAD~1 = @~ = 부모 HEAD
- 예) HEAD~5 = 현재 HEAD에서 5번 이전 HEAD
- index : 커밋 전 상태
- git add 명령을 한 후
- stage에 올려진 상태
- work folder : 현재 내용
- git commit 를 하면 HEAD, index, work folder 셋이 모두 같아 짐
//=================
< git reset >
* soft
- git reset --soft HEAD~
- HEAD~(부모 HEAD)로 이동
- git commit 이전 상태
- 파일 변화 없음
* mixed
- 기본 옵션
- git reset --mixed HEAD~
- HEAD~(부모 HEAD)로 이동
- git commit 와 git add 이전 상태
- 파일 변화 없음
* hard
- 기본 옵션
- git reset --hard HEAD~
- HEAD~(부모 HEAD)로 이동
- git commit -> git add -> work tree
- 파일 까지 이전 상태로 돌아감
- reflog로 확인하고 다시 복구 가능
//=========================
* git reset --hard 명령후 파일 복구 방법
- 커밋 확인
git reflog
0236c32 HEAD@{14}: commit: 2
1fe4b73 HEAD@{15}: commit (initial): 1
- 복구
gir reset --hard HEAD@{14}
//-----------------------------------------------------------------------------
[git] 원격 서버(github)에 push한 커밋 취소 방법
https://stackoverflow.com/questions/22682870/how-can-i-undo-pushed-commits-using-git
> git reset --hard <previous label or sha1>
> git commit -am "blabla" <== 옵션
> git push --force origin 작업브랜치
- 브랜치에 강제 쓰기 권한이 설정되어 있어야 한다. 기본으로 관리자는 모든 브랜치에 강제쓰기 가능
//-----------------------------------------------------------------------------
//=====================
* git 완전 초기화
//-------------------------------------------------
- submodule이 없는 경우 git 초기화
- .git 폴더 삭제
rm -rf .git
- 저장소 초기화
git init
git add .
git commit -m "Initial commit"
- 계정 설정
git remote add origin https://아이디:비밀번호@github.com/계정/저장소
-
git push -u --force origin master
-u (pull, push)등의 기본 브랜치를 master 로 설정
//----------------------------------------
- submodule이 있는 경우 git 초기화
git checkout --orphan newBranch
git add -A # Add all files and commit them
git commit
git branch -D master # Deletes the master branch
git branch -m master # Rename the current branch to master
git push -f origin master # Force push master branch to github
git gc --aggressive --prune=all # remove the old files
//=========================
* 바뀐 .gitginore 적용
- git 캐쉬 지우기 (git cache)
git rm -r --cached .
git add . <== 꼭 필요
다시 add -> commit -> push
//=========================
* 원격 저장소에 잘못 올린 파일, 모든 히스토리에서 삭제
- 모든 커밋(commit)
https://dev.to/jenninat0r/removing-accidentally-committed-files-from-remote-history-3acj
git filter-branch --index-filter "git rm --cached -f -r --ignore-unmatch 파일이름" --tag-name-filter cat -- --all
git update-ref -d refs/original/refs/heads/master
git reflog expire --expire=now --all
git gc --prune=now
git push origin --force --all
//===============
* git checkout 브랜치
- 브랜치 변경
//=================
// 참고
Git 도구 - Reset 명확히 알고 가기
https://git-scm.com/book/ko/v2/Git-%EB%8F%84%EA%B5%AC-Reset-%EB%AA%85%ED%99%95%ED%9E%88-%EC%95%8C%EA%B3%A0-%EA%B0%80%EA%B8%B0
https://gmlwjd9405.github.io/2018/05/25/git-add-cancle.html
'Code' 카테고리의 다른 글
[git] warning LF will be replaced by CRLF , 경고 메시지 안보게 하기 (0) | 2019.11.01 |
---|---|
VS Code - aleady running as asministrator 에러 해결방법 (0) | 2019.07.15 |
리눅스 쉘 스크립트 사용법 (0) | 2019.04.26 |
프로그래밍 단위 테스트 방법 (0) | 2019.01.10 |
프로그래밍 언어 역사 (0) | 2016.05.19 |