Git 사용 시나리오별로 해결 방법을 연구 합니다.
Git Branch Log를 그래픽으로 보고 싶어요.
$ git log --branches --graph --decorate --oneline
Git Add 를 취소하고 싶어요.
git restore --staged (filename)
Git Commit을 취소하고 싶어요.
reset 옵션
–soft : index 보존(add한 상태, staged 상태), 워킹 디렉터리의 파일 보존. 즉 모두 보존.
–mixed : index 취소(add하기 전 상태, unstaged 상태), 워킹 디렉터리의 파일 보존 (기본 옵션)
–hard : index 취소(add하기 전 상태, unstaged 상태), 워킹 디렉터리의 파일 삭제. 즉 모두 취소.
- commit은 취소하고 파일은 stage상태로
- git reset --soft HEAD^
- commit은 취소하고 파일은 unstage상태로 (default)
- git reset --mixed HEAD^
- git reset HEAD^
- 마지막2개 commit취소
- git reset HEAD~2
- commit은 취소하고 해당파일을 unstage상태로 워킹디렉터리에서 삭제
- git reset --hard HEAD^
Git Push를 취소하고 싶어요.
reset 옵션
–soft : index 보존(add한 상태, staged 상태), 워킹 디렉터리의 파일 보존. 즉 모두 보존.
–mixed : index 취소(add하기 전 상태, unstaged 상태), 워킹 디렉터리의 파일 보존 (기본 옵션)
–hard : index 취소(add하기 전 상태, unstaged 상태), 워킹 디렉터리의 파일 삭제. 즉 모두 취소.
- 워킹 디렉토리의 commit을 되돌린다.
- git reset HEAD^ #최근의 커밋을 취소함
- git reset [commit id] #원하는 시점으로 워킹디렉토리를 되돌린다.
- 돌려진 상태에서 다시 commit한다.
- git commit -m "commit message"
- 원격저장소에 강제로 push 한다.
- git push origin branchname -f
- git push origin branchname --force
- git push origin +branchname
Git commit N개를 합치고 싶어요.
Patch 파일을 만들고 싶어요.
- commit-id에서부터 현재까지의 commit을 각patch파일로 생성 (commit 마다 patch파일 생성)
- git format-patch [commit-id]
- git format-patch -2
전달받은 Patch파일을 commit하고 싶어요.
- git am [patch-filename]
Commit하기전 파일을 비교해서(diff) Patch 파일을 만들고 싶어요.
- git diff > patch-filename
두 Branch를 합치고 싶어요.
- issue1 브렌치를 master 브랜치로 병합
- git checkout master
- git merge issue1
- merge 확인
git log --branches --graph --decorate --oneline
개발을 하고 있었는데, 앗 새로운 Branch에서 작업 하고 싶어요.
- Commit하기전 개발하고 있던 파일들이 새로운 브랜치로 옮겨 집니다.
- git checkout -b new-branch
개발을 하고 commit을 했는데, 새로운 branch로 작업내용을 옮기고 싶어요.
- 새로운 Branch를 만들고, 이전 branch의 작업내용을 reset합니다.
- git checkout -b new-branch
- git checkout develop
- git reset --hard HEAD~1
Git Commit Global 계정을 설정/변경/삭제 하고 싶어요.
## 설정된 정보 보기 $ git config --list http.sslbackend=openssl http.sslcainfo=C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt diff.astextplain.textconv=astextplain core.autocrlf=true core.fscache=true core.symlinks=false user.name=Sanse user.email=sooabia@gmail.com core.editor="C:\Users\Sanse\AppData\Local\Programs\Microsoft VS Code\Code.exe" --waitfilter.lfs.process=git-lfs filter-process filter.lfs.required=true filter.lfs.clean=git-lfs clean -- %f filter.lfs.smudge=git-lfs smudge -- %f push.default=simple ## 설정/변경 하기 $ git config --global user.name "Sanse" $ git config --global user.email sanse@gmail.com ## 삭제 하기 $git config --unset --global user.name $git config --unset --global user.email
Git Commit Message를 수정하고 싶어요.
## 방금전 Commit한 메세지 수정 $ git commit --amend -m "{변경할 메시지}" ## 과거 Commit한 메세지 수정 (예: CommitID-3만 수정) $ git log CommitID-5 CommitID-4 CommitID-3 CommitID-2 CommitID-1 $ git rebase -i {CommitID-3} ------ EDITER -------- pick CommitID-5 pick CommitID-4 pick CommitID-3 ==> pick CommitID-5-message pick CommitID-4-message edit CommitID-3-message ------ //EDITER -------- # SAVE # Git 설명이 아래와 같이 출력되요. You can amend the commit now, with git commit --amend Once you are satisfied with your changes, run git rebase --continue $ git commit --amend ------ EDITER -------- CommitID-3-message --> {변경할 Commit 메세지} ------ //EDITER -------- # SAVE $ git rebase --continue Successfully rebased and updated refs/heads/develop.
Commit 한 Author을 변경하고 싶어요.
## 방금 Commit한 Author 변경하기 $ git commit --amend --author="{변경할이름}<변경할이메일>" ## 과전에 Commit한 Author 변경하기 (예: CommitID-3의 Author수정) $ git log CommitID-5 CommitID-4 CommitID-3 CommitID-2 CommitID-1 $ git rebase -i {CommitID-3} ------ EDITER -------- pick CommitID-5 pick CommitID-4 pick CommitID-3 ==> pick CommitID-5-message pick CommitID-4-message edit CommitID-3-message ------ //EDITER -------- # SAVE # Git 설명이 아래와 같이 출력되요. You can amend the commit now, with git commit --amend Once you are satisfied with your changes, run git rebase --continue $ git commit --amend --author="{변경할이름}<변경할이메일>" $ git rebase --continue Successfully rebased and updated refs/heads/develop.