
git reset 후 돌아오는 방법reset하기 전 git history로 커밋아이디 확인한 경우$ git history
// 커밋아이디 확인하기
$ git reset --hard [되돌아갈 커밋아이디]
// reflog(refernce log) : 헤드가 이때까지 가리켜왔던 커밋들을 기록한 정보가 출력됨
$ git reflog
// 커밋아이디 및 HEAD@{} 확인하기
$ git reset --hard [되돌아갈 커밋아이디 or HEAD@{}]
** 과거의 커밋으로 reset을 해도 reset한 커밋 그 이후의 커밋들이 삭제되는 것은 아님
git log --pretty=oneline현재 branch에 해당하는 커밋들만 보임
git log --pretty=oneline --all현재 branch에 해당하는 커밋들 뿐만 아니라 다른 모든 branch의 커밋 히스토리를 볼 수 있음
git log --pretty=oneline --all --graph커밋과 branch의 관계를 그래프로 입체적으로 보여줘 커밋 히스토리 파악이 쉬움
git rebase 사용하기$ git rebase [합칠 브랜치 이름]
// conflit 해결 후 리베이스 계속 진행시키는 커맨드
$ git rebase --continue
merge와 rebasemerge는 두 브랜치를 합쳤다는 정보가 커밋 히스토리에 남아야 하는 경우 사용rebase는 새로운 커밋을 만들지 않아 커밋 히스토리를 깔끔하게 유지하고 싶은 경우git stashgit stash// working directory에서 작업하던 내용을 깃이 따로 보관(stack)
$ git stash
// 작업 내용 조회(=스택 살펴보기)
$ git stash list
// 다른 브랜치 이동 후 작업
// 다시 작업을 못끝낸 브랜치로 이동
$ git checkout [브랜치 이름]
// stack에 있는 작업 내용을 다시 working directory에 적용
$ git stash apply [작업 내용 아이디]
git stash applygit stash로 stack에 작업 내용 저장
올바른 브랜치로 이동 후 다시 git stash apply [작업내용 아이디] 하면 됨
** 작업 내용의 아이디를 생략하면 가장 최근의 작업 내용이 적용됨
git stash dropgit stash list로 조회git stash drop [작업 내용 아이디]로 제거git stash popgit stash pop [작업 내용 아이디]git cherry-pick원하는 작업이 있는 커밋의 내용만 가져와서 현재 브랜치에 추가하는 커맨드
1. git history --all
2. git cherry-pick [가져오고 싶은 커밋 아이디]
3. conflict 해결
4. git add .
5. git commit -m "Enter commit messages"
불필요한 커밋을 없애고 싶을 때 사용할 수 있음
git reset --soft
// accd~~ 와 wxyz 커밋을 하나로!
$ git history
abcdcommit id (HEAD -> Branch name) Enter commit messages2
wxyzcommit id Enter commit messages
opqrcommit id Add get_Sum function
// 과거의 커밋으로 리셋이 되면서도 현재 working directory 내용은 그대로!
$ git reset --soft opqr
// working directory 모습은 최신 상태(Enter commit messages2 커밋 내용)
$ git add .
$ git commit -m "Enter commit messages"
원격 저장소의 변경 사항을 로컬로 가져와서 현재 브랜치에 통합한 후 다시 푸시
$ git pull origin main
$ git push origin main
로컬 브랜치의 변경 사항을 강제로 원격 저장소의 브랜치에 반영함
$ git push -f origin main
❗❗ 강제 푸시는 원격 저장소의 변경 사항을 덮어쓰므로 주의해야 함.
❗❗ 필요한 경우에만 사용하고, 다른 개발자와 협업할 때에는 사용하지 않는 것이 좋음.
// 로컬에서 삭제한 파일 복구
// <파일 경로>: 파일 이름 or 디렉토리 이름
$ git checkout -- <파일 경로>
// 스테이징 영역에서 삭제한 파일을 다시 로컬로 가져올
$ git reset -- <파일 경로>
// 이전 커밋의 상태로 돌아감
$ git revert <commit>
// 원격 저장소에서 다시 내려받음
$ git checkout <브랜치 이름> -- <파일 경로>
예) NewBranch의 모든 파일을 로컬로 가져옴
$ git checkout NewBranch -- .