바이오 대표

[Git] 작업취소 - git [checkout/reset/commit --amend] 본문

Programming enviorment

[Git] 작업취소 - git [checkout/reset/commit --amend]

바이오 대표 2021. 12. 5. 02:29

 

  • Undoing Unstaged        $ git checkout [file]
  • Undoing Staged            $ git reset HEAD [file]
  • Undoing Committed     $ git commit --amend "commend"
  • RollBack                         $ git revert HEAD 

 

 

< undoing unstaged >

$ git checkout [file]

: Unstaged 상태의 파일이 수정 전으로 돌아간다. 

 

 

< undoing staged > 

$ git reset HEAD [file]

: Staged 되었던 파일 --> Unstaged 

* HEAD : current snapshot 

* -p flag를 사용하면, modify 할때마다 물어본다 if you want to snapshot or not (commit or not)

 

$ git add * ( stage all the changes ) 

 

 

< undoing commited > 

$ git commit --amend "commend" 

: 지금 뭐가 staging area 에 있던, overwrite previous commit 

 

!! local 에서 작업할 때는 괜찮지만 public 하게 다른 사람들과 공유한다면 위험한 방법이다.

   Commit ID 가 바뀌어서 follow up 이 어렵다.

 

 

< Rollbacks >  

$ git revert HEAD 

:  It creates a new commit with inverse changes

- git 에서 자동으로 'the reverts commit 5aab0fdkjaslkdjfa-38802' 와 같은 command 를 추가해서 이것이 rollback 알림 

- 여기서 HEAD 는 current snapshot 이 아니라 to rewind that current commit 

-  여기에 왜 rollback 하는지 알려주면 좋다.  

 

 

< 더 예전 버전으로 돌아가기 identifying commit 

commit ID 을 이용해서 돌아갈 수 있다.

$ git show [commit ID] 

$ gir revert [commit ID]

 

*  Commit ID 는 consistency of data를 위해 hash by SHA1 40character strings로 만들어졌다.

 

 

 

 

git checkout is effectively used to switch branches.

git reset basically resets the repo, throwing away some changes. It’s somewhat difficult to understand, so reading the examples in the documentation may be a bit more useful.

There are some other useful articles online, which discuss more aggressive approaches to resetting the repo.

git commit --amend is used to make changes to commits after-the-fact, which can be useful for making notes about a given commit.

git revert makes a new commit which effectively rolls back a previous commit. It’s a bit like an undo command.

There are a few ways you can rollback commits in Git.

There are some interesting considerations about how git object data is stored, such as the usage of sha-1.

Feel free to read more here: