>  기사  >  개발 도구  >  Git에서 커밋을 취소하는 방법

Git에서 커밋을 취소하는 방법

青灯夜游
青灯夜游원래의
2021-11-29 15:15:12217568검색

git에서 커밋을 취소하는 방법: 1. 실행 취소하려면 "git rm" 명령을 사용하세요. 2. 실행 취소하려면 "git rebase" 명령을 사용하세요. 실행 취소하려면 "git revert" 명령을 사용하세요.

Git에서 커밋을 취소하는 방법

이 튜토리얼의 운영 환경: Windows 7 시스템, Git 버전 2.30.0, Dell G3 컴퓨터.

때때로 잘못된 코드를 제출하여 특정 커밋 기록을 취소해야 하는 경우가 있습니다. 다음은 여러 가지 방법입니다.

1. 파일 삭제

삭제해야 하는 커밋이 하나 이상의 파일인 경우 다음을 수행할 수 있습니다. 다음을 수행합니다.

1. 웨어하우스에 제출된 파일을 삭제해야 하는 경우 git rm 명령을 사용할 수 있습니다: git rm 命令:

git rm <file> // 从工作区和暂存区删除某个文件
git commit -m "" // 再次提交到仓库

2、如果只想从暂存区删除文件,本地工作区不做出改变,可以:

git rm --cached <file>

3、如果在工作区不小心删错了某个文件,可以用 git checkout 将暂存区的文件覆盖工作区的文件,从而把误删的文件恢复:

git checkout -- <file>

4、用 git rm 删除文件,同时还会将这个删除操作记录下来;

rm 删除文件,删除的仅仅是本地物理文件,没有将其从 git 的记录中剔除。

5、git addgit rm 有相似的功能,

git add 仅能记录添加、改动的动作,删除的动作需靠 git rm 来完成。

二、GitHub 撤销某次 commit

如果需要删除的不只是某个文件,而是交错的代码,那么有以下三种方法可以删除 commit 。

1、git reset

  • git reset :回滚到某次提交。
  • git reset --soft:此次提交之后的修改会被退回到暂存区。
  • git reset --hard:此次提交之后的修改不做任何保留,git status 查看工作区是没有记录的。

1)回滚代码

如果需要删除的 commit 是最新的,那么可以通过 git reset 命令将代码回滚到之前某次提交的状态,但一定要将现有的代码做好备份,否则回滚之后这些变动都会消失。具体操作如下:

git log // 查询要回滚的 commit_id
git reset --hard commit_id // HEAD 就会指向此次的提交记录
git push origin HEAD --force // 强制推送到远端

2)误删恢复

如果回滚代码之后发现复制错了 commit_id,或者误删了某次 commit 记录,也可以通过下方代码恢复:

git relog // 复制要恢复操作的前面的 hash 值
git reset --hard hash // 将 hash 换成要恢复的历史记录的 hash 值
  1. 注意:删除中间某次提交时最好不要用 git reset 回退远程库,因为之后其他人提交代码时用 git pull 也会把自己的本地仓库回退到之前的版本,容易出现差错进而增加不必要的工作量。

2、git rebase

  • git rebase:当两个分支不在一条线上,需要执行 merge 操作时使用该命令。

1)撤销提交

如果中间的某次 commit 需要删除,可以通过 git rebase 命令实现,方法如下:

git log // 查找要删除的前一次提交的 commit_id
git rebase -i commit_id // 将 commit_id 替换成复制的值
进入 Vim 编辑模式,将要删除的 commit 前面的 `pick` 改成 `drop`
保存并退出 Vim

这样就完成了。

2)解决冲突

该命令执行时极有可能出现 reabase 冲突,可以通过以下方法解决:

git diff // 查看冲突内容
// 手动解决冲突(冲突位置已在文件中标明)
git add <file> 或 git add -A // 添加
git rebase --continue // 继续 rebase
// 若还在 rebase 状态,则重复 2、3、4,直至 rebase 完成出现 applying 字样
git push

3、git revert

  • git revert:放弃某次提交。
    git revert 之前的提交仍会保留在 git log 中,而此次撤销会做为一次新的提交。
  • git revert -m:用于对 merge 节点的操作,-m 指定具体某个提交点。

1)撤销提交

要撤销中间某次提交时,使用 git revert 也是一个很好的选择:

git log // 查找需要撤销的 commit_id
git revert commit_id  // 撤销这次提交

2)撤销 merge 节点提交

如果这次提交是 merge 节点的话,则需要加上 -m

git revert commit_id -m 1 // 第一个提交点
// 手动解决冲突
git add -A
git commit -m ""
git revert commit_id -m 2 // 第二个提交点
// 重复 2,3,4
git push
2. 임시 저장 영역에서만 파일을 삭제하려면, 로컬 작업 공간은 변경되지 않습니다.

rrreee 3. 작업 공간에서 실수로 파일을 삭제한 경우 git checkout을 사용하여 임시 저장 영역에 있는 파일을 다음으로 덮어쓸 수 있습니다. 복구: rrreee

4. git rm을 사용하여 파일을 삭제하면 삭제 작업도 기록됩니다. /code>를 사용하여 파일을 삭제하면 git의 레코드에서 파일을 제거하지 않고 로컬 실제 파일만 삭제됩니다. 🎜🎜5. git addgit rm은 비슷한 기능을 가지고 있지만 🎜🎜하지만 git add는 추가, 변경, 삭제만 기록할 수 있습니다. git rm으로 완료됩니다. 🎜🎜🎜🎜2. GitHub는 커밋을 취소합니다🎜🎜🎜🎜파일뿐만 아니라 인터리브된 코드도 삭제해야 하는 경우 커밋을 삭제하는 세 가지 방법이 있습니다. 🎜🎜🎜1.git Reset🎜🎜
  • git Reset: 특정 커밋으로 롤백합니다.
  • git Reset --soft: 이 제출 이후의 수정 사항은 준비 영역으로 반환됩니다.
  • git Reset --hard: 이 제출 후에는 수정 사항이 유지되지 않습니다. git status 작업 공간에 기록이 없습니다.
🎜1) 코드 롤백🎜🎜삭제해야 할 커밋이 최신 커밋인 경우 git Reset 명령을 사용하여 코드를 이전 커밋으로 롤백할 수 있습니다. 그러나 기존 코드를 백업해야 합니다. 그렇지 않으면 롤백 후에 이러한 변경 사항이 사라집니다. 구체적인 동작은 다음과 같습니다. 🎜rrreee🎜2) 실수로 인한 삭제 복구🎜🎜코드 롤백 후 잘못된 commit_id를 복사했거나, 실수로 커밋 기록을 삭제한 것을 발견한 경우, 다음 코드를 통해서도 복원할 수 있습니다. 🎜rrreee
  1. 참고: 중간에 특정 커밋을 삭제할 때 원격 라이브러리를 롤백하기 위해 git Reset을 사용하지 않는 것이 가장 좋습니다. 나중에 코드를 작성하면 git pull을 사용하여 원격 라이브러리를 롤백합니다. 로컬 웨어하우스를 이전 버전으로 롤백하면 오류가 발생하기 쉽고 불필요한 작업량이 늘어납니다.
🎜🎜2. git rebase🎜🎜
  • git rebase: 두 브랜치가 같은 줄에 있지 않고 작업을 수행해야 할 때 이 명령을 사용하세요. 병합 작업.
🎜1) 커밋 취소🎜🎜중간에 특정 커밋을 삭제해야 하는 경우 git rebase 명령을 사용하면 됩니다. 🎜 rrreee🎜그렇습니다. 🎜🎜2) 충돌 해결🎜🎜이 명령을 실행할 때 리베이스 충돌이 발생할 가능성이 매우 높으며, 이는 다음 방법으로 해결할 수 있습니다: 🎜rrreee🎜🎜3, git revert🎜🎜
  • git revert : 특정 제출을 취소합니다. 🎜git revert 이전 제출은 여전히 ​​git 로그에 남아 있으며 이번 취소는 새로운 제출로 처리됩니다.
  • git revert -m: 병합 노드를 작동하는 데 사용되며 -m은 특정 제출 지점을 지정합니다.
🎜1) 커밋 취소🎜🎜중간 커밋을 취소하고 싶을 때 git revert를 사용하는 것도 좋은 선택입니다: 🎜rrreee🎜2) 병합 노드 실행 취소 commit🎜 🎜이 제출물이 병합 노드인 경우 -m 명령을 추가해야 합니다: 🎜rrreee🎜권장 학습: "🎜Git Tutorial🎜"🎜

위 내용은 Git에서 커밋을 취소하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.