git amend 명령어 정리


  • git amend에 대해서 공부하고 정리한 글입니다

amend

  • amend 명령어를 사용하면 방금했던 커밋(원격 저장소에 푸시 했더라도)을 수정할 수 있다

  • 커밋 메시지를 수정하고 싶은 경우

    $ echo add > add.txt
    # add 라는 내용 들어있는 add.txt 파일 생성
    
    $ git add add.txt
    
    $ git commit -m "."
    # 커밋
    
    $ git show HEAD
    # 커밋 메시지 확인
    
    $ git commit --amend -m "Add new file"
    # 방금한 커밋의 커밋 메시지 수정
    
    $ git show HEAD
    # 변경된 커밋 메시지 내용을 확인할 수 있다
    
  • 만약 이미 해당 커밋을 Remote repository에 push 한 경우, 커밋 메시지를 변경시킨 다음 해당 브랜치에 강제 push 해주어야 한다

    $ git push -f origin "branch_name"
    
  • 커밋 후 파일의 내용을 수정하고 싶은 경우

    $ cat add.txt
    # 앞에서 추가한 파일 내용 확인
    
    $ open add.txt
    # vim add.txt
    # 파일 내용 수정
    # add -> add2
    
    $ git status
    # modified 상태 확인
    
    $ git add cat.txt
    # 파일 내용 수정한다음에 다시 add 해준다
    
    $ git commit --amend
    # 기본적으로 설정한 에디터에서 커밋 내용이 보인다
    # 커밋 메시지 수정 안하는 경우에는 그냥 종료
    
    $ git log
    # 커밋 메시지 수정안하면 그대로 보인다
    # 새로운 커밋 추가되는 것이 아니라 마지막 커밋의 파일 내용이 수정된 것 확인할 수 있다
    
    $ git show HEAD
    # 파일 내용 수정된 것 확인
    
    
  • 이렇게 amend 명령어 사용해서 수정하는 것은 아직 git push 사용해서 서버에 업로드 하지 않았을 때만 가능하다


  • 소스트리 기준

    • 커밋을 한 다음 커밋한 파일에서 수정해야할 부분이 있는 경우 우선 파일의 수정하고 싶은 부분을 수정한다

    • 그리고 소스트리 기준 Amend last commit (커밋옵션 → 마지막 커밋 정정) 을 해주면 내가 지금 스테이지에 올린 변경사항이 기존 커밋에 추가되면서 기존 커밋이 덮어 씌워진다

    • 이미 커밋을 원격 저장소에 푸시한 경우, 로컬저장소의 변경 사항을 원격 저장소에 강제로 덮어 씌우며 푸시하기 위해서 [강제 푸시]를 사용한다

    • 강제푸시는 나 혼자만 쓰고 있는 브랜치에서만 해야한다

    • 공용으로 사용하는 브랜치에서 강제 푸시를 하면 다른 사람의 커밋 히스토리가 엉망으로 꼬일 수 있다

    • 이미 커밋을 원격 저장소에 푸시한 다음 다시 amend(마지막 커밋 정정)를 하면 로컬저장소의 커밋은 변경되지만 원격 저장소는 변경 사항이 반영되지 않기 때문에 master와 origin master가 각각 다른 브랜치로 존재한다

    • 이 때 강제 푸시를 하게 되면 아래 사진과 같이 master와 origin master가 같은 브랜치로 존재하게 된다


Reference









© 2020. by dkmqflx

Powered by dkmqflx