티스토리 뷰
로컬 저장소에서 파일이 사라지는 문제 원인
1. 커밋하지 않은 상황 :
로컬 저장소에서 변경한 파일을 커밋하지 않고 pull하면 변경된 파일이 사라질 수 있습니다..(내 상황)
따라서 커밋 후 git pull 실행 추천!
2. 충돌 발생 :
원격 저장소와 로컬저장소에서 동일한 파일을 수정하는 경우에 충돌이 발생할 수 있습니다.
이때 충돌을 해결하지 않고 git pull을 실행하면 충돌이 있는 파일이 사라질 수 있습니다.
따라서 충돌을 해결하고 다시 커밋해야합니다.
3. 강제로 덮어쓰기 :
git pull 실행 시 '--force' , 강제 병합 등 원격 저장도의 변경 사항을 로컬 저장소에 강제로 적용하면,
로컬 저장소의 변경 내용이 사라질 수 있습니다.
1. 커밋하지 않은 상황 해결법
git reflog
커밋 로그들을 확인해봅니다.
과거의 나를 믿으면서 가장 최신 파일이라도 불러오려고 노력을 ...
이전에 commit 한 파일들이 나옵니다.
여기서 HEAD@{0} 은 현재 작업 중인 브랜치의 최신 커밋입니다!
push 하고 이전 commit 으로 되돌리기
1) git revert
팀 프로젝트의 경우 revert를 쓰는 걸 추천합니다.
특정 커밋을 되돌리는 작업을 새로운 커밋으로 만들기 때문에, 변경 이력을 보존하고 협업 환경에서 안전성을 높여줍니다.
git revert는 특정 커밋을 되돌리는 작업을 수행하고, 그 결과를 새로운 커밋으로 만들어 커밋 히스토리에 추가하는 방식.
git reset --soft 또는 git reset --mixed와는 달리, git revert는 히스토리를 변경하지 않고 이전 커밋 상태로 되돌리는 대신 새로운 커밋을 생성.
이전 상태로 되돌릴 수 있으면서도 변경 이력을 유지.
예시 )
A - B - C - D (HEAD)
여기서 'C' 커밋으로 되돌리고 싶다면 git revert C
A - B - C - D - E (HEAD)
여기서 E 커밋은 C커밋을 되돌리는 작업을 수행한 새로운 커밋 입니다.
이렇게 함으로써 C 커밋의 변경 사항은 취소되었지만 커밋 히스토리에는 변경 내역을 유지 할 수 있습니다.
2) git reset --(hard, mixed, soft)
혼자만 사용하는 브랜치 일 때,
다른 사람들이 해당 브랜치를 받은 적이 없다고 확인된 경우에만 사용할 것!
git reset --hard
git reset 은 git 에서 브랜치의 히스토리를 특정 커밋으로 되돌린다. 단 주의할 점은
해당 커밋 지점인 HEAD를 지정된 커밋으로 이동하고, 그 이후 모든 항목을 폐기한다.
예시 )
A - B - C - D(HEAD)
A라는 시점으로 되돌리고 싶어 git hard를 사용하면
A(HEAD) -B - C - D
이렇게 되는데 B,C,D 내역을 모두 삭제한다.
git reset --mixed
HEAD를 지정된 커밋으로 이동시키고 인덱스를 해당 커밋의 상태로 되돌린다,
그러나 작업 디렉토리는 변경되지 않는다.
HEAD를 이동시키는 측면에서는 git reset --hard와 유사하지만, 작업 디렉토리는 변경되지 않으므로 작업 중인 변경 사항은 유지됩니다.
예시 )
A - B - C - D (HEAD)
여기서 git reset --mixed C를 실행, 그러나 hard와는 다르게 커밋 D는 로컬 브랜치의 히스토리에서 삭제되지 않는다.
단지 HEAD를 이동하여 C 커밋으로 위치시킨것
작업 디렉토리의 변경 사항은 유지된다.
A - B - C (HEAD)
|
D (작업 디렉토리에 변경 사항 유지)
git reset --soft
HEAD를 지정된 커밋으로 이동시키지만, 인덱스와 작업 디렉토리는 변경하지 않습니다.
이는 HEAD를 이동하여 이전 커밋으로 되돌리지만, 변경 사항은 그대로 유지됩니다.
이러한 변경 사항은 스테이징 영역에 그대로 남아 있게 됩니다.
예시 )
A - B - C (HEAD)
|
D (변경 사항은 스테이징 영역에 유지)
D의 변경 사항은 스테이징 영역에 그대로 남아 있기 때문에 다시 커밋할 수 있다.
push 하고 이전 commit 으로 되돌리기
커밋 오류 발생
저의 경우는 커밋을 안했기에 다시 만들고
commit을 시도했습니다.
이렇게 커밋 오류가 발생하는 경우가 있는데요.
' Untracked files ' 은 깃이 추적하지 않은 파일들을 나타냅니다. 이 파일들을 아직 깃의 추적상태가 아니므로
변경된 파일들을 스테이징 영역에 추가하고 git add 커밋을 합니다.
git add .
# 모든 변경된 파일을 스테이징 영역에 추가
개별 파일을 지정해서 추가하는 것 보다
편리하게 사용할 수 있습니다.
모든 변경 파일을 스테이징 영역에 추가하고 싶다면 git add . 를 사용합니다
git add <file1> <file2> ...
# 변경된 파일들을 스테이징 영역에 추가
git-bush 에서 복붙 쓰는 방법
Ctrl + insert : 복사
Shift + insert : 붙여넣기
다시 커밋을 시도하면
이렇게 성공합니다.
이 상태에서 프로젝트 작업하던 파일을 git pull 합니다.
git pull 하기전에 커밋이나 stash 로 임시저장 꼭 하세요!