[Git] 실수 되돌리기

Code 2019. 7. 14. 09:30

      - 서버를 이전 상태로 복구, 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

반응형
Posted by codens