로컬 깃 커밋을 취소하려면 어떻게 해야 합니까?
문제는 파일을 변경했다는 것입니다. 예:README에서 'this for my testing line'이라는 새 행을 추가하고 파일을 저장한 후 다음 명령을 실행했습니다.
git status
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: README
#
no changes added to commit (use "git add" and/or "git commit -a")
git add README
git commit -a -m 'To add new line to readme'
GitHub에 코드를 푸시하지 않았습니다.이제 이 커밋을 취소합니다.
이거는 제가.
git reset --hard HEAD~1
그런데 README 파일에서 새로 추가된 'this for my testing line' 줄을 잃어버렸습니다.이런 일이 있어서는 안 됩니다.나는 거기에 있을 내용이 필요합니다.내용을 유지하고 로컬 커밋을 취소할 수 있는 방법이 있습니까?
그냥 사용하기git reset
을 제외하고--hard
플래그:
git reset HEAD~1
PS: Unix 기반 시스템에서 사용할 수 있습니다.HEAD^
와 같은 것HEAD~1
Windows에서HEAD^
다음과 같은 이유로 작동하지 않을 것입니다.^
라인 연속을 나타냅니다.그래서 명령 프롬프트가 당신에게 묻습니다.More?
.
사용하다--soft
대신에--hard
깃발
유닉스:
git reset --soft HEAD^
Windows:
git reset --soft HEAD~
마지막 로컬(푸시되지 않은) 커밋은 제거되지만 변경한 내용은 유지됩니다.
커밋 중인 경우(즉, 이미 편집기에서) 첫 번째 줄 위의 모든 줄을 삭제하여 커밋을 취소할 수 있습니다.#
그러면 커밋이 중단됩니다.
따라서 커밋 메시지가 비어 있도록 모든 행을 삭제한 다음 파일을 저장할 수 있습니다.
그러면 다음과 같은 메시지가 표시됩니다.Aborting commit due to empty commit message.
.
먼저 커밋 메시지를 삭제하기 전에 로컬 변경사항을 유지할지 여부를 결정해야 합니다.
사용하다git log
현재 커밋 메시지를 표시한 다음commit_id
삭제할 커밋이 아닌 삭제할 커밋 앞에 표시됩니다.
로컬에서 변경된 파일을 유지하고 커밋 메시지만 삭제하려면 다음을 수행합니다.
git reset --soft commit_id
로컬에서 변경된 모든 파일과 커밋 메시지를 삭제하려면 다음을 수행합니다.
git reset --hard commit_id
그게 소프트와 하드의 차이점입니다.
다음 매개 변수 중 하나를 사용하여 Git 재설정을 수행할 때 인덱스(다음 커밋이 될 파일 집합) 및 작업 디렉터리에서 수행할 작업을 Git에 지시할 수 있습니다.
--soft
인덱스 및 작업 디렉터리는 변경되지 않고 커밋만 재설정됩니다.
--mixed
이렇게 하면 색인이 HEAD와 일치하도록 재설정되고 작업 디렉토리는 터치되지 않습니다.모든 변경사항은 작업 디렉토리에 남아 수정된 것으로 나타납니다.
--hard
모든 항목(커밋, 인덱스, 작업 디렉터리)을 HEAD와 일치하도록 재설정합니다.
당신의 경우, 저는git reset --soft
수정된 변경사항을 색인 및 작업 디렉토리에 보관합니다.더 자세한 설명을 위해 이것을 꼭 확인하세요.
아래 명령 사용:
$ git reset HEAD~1
이 후에는 아래 응답과 같이 반환되는 파일도 볼 수 있습니다.
Unstaged changes after reset:
M application/config/config.php
M application/config/database.php
@Amal Kumar가 말했듯이.git 명령어를 사용하면 됩니다.
git reset HEAD~1
여기서 저는 또 다른 상황에 부닥쳤습니다.
두 개의 분기가 있습니다. 하나는 'dev', 하나는 'new'입니다. 하나는 'new'입니다. 하나는 dev에서 버그를 수정한 다음, 다른 하나는 new:
git rebase origin/dev
git push -f
서버에서 새 분기가 실행되고 있는 동안 서버에서 새 분기를 업데이트하면 로컬 커밋을 추가할 수 있습니다.
git pull
# On branch new
# Your branch and 'origin/new' have diverged,
# and have 7 and 10 different commits each, respectively.
# (use "git pull" to merge the remote branch into yours)
# nothing to commit, working tree clean
'git pull'이 작동하지 않습니다...
'git reset HEAD~1'이(가) 작동하지 않습니다...
사용합니다
git reset origin/new
일을 끝내려고요
언급URL : https://stackoverflow.com/questions/4850717/how-to-cancel-a-local-git-commit
'source' 카테고리의 다른 글
Postgresql 열 = 배열이 있는 행을 선택합니다. (0) | 2023.05.04 |
---|---|
MongoDB에서 count()와 find()의 차이.count() (0) | 2023.05.04 |
Xcode에서 특정 소스 파일의 모든 경고를 억제하는 방법은 무엇입니까? (0) | 2023.05.04 |
MongoDB에는 기본 REST 인터페이스가 있습니까? (0) | 2023.05.04 |
Git 저장소를 이전 커밋으로 되돌리려면 어떻게 해야 합니까? (0) | 2023.05.04 |