自学内容网 自学内容网

如何使用 Git Cherry-Pick 和 Reset 处理误提交,并确保安全回滚

在开发过程中,偶尔会遇到不小心将功能开发提交到错误分支上的情况。假设我们计划在 10 月 24 号上线某些功能,但却不小心在 10 月 17 号的上线分支上进行了开发。为了解决这个问题并将误提交的内容移到正确的分支上,我们可以借助 Git 的一些功能,例如 cherry-pickreset,并通过更安全的方式将分支回滚到正确状态。

场景

问题:在 10 月 17 号上线的分支 release-10.17 上开发了 10 月 24 号上线的功能。我们需要:

  1. master 分支拉取一个新的分支,作为 10.24 号的上线分支。
  2. 找到误提交的内容并将其移到正确的分支上。
  3. 将错误的提交回滚并同步到远程仓库。
  4. 使用 安全的回滚方式 确保分支不会被误改。

操作步骤

1. 创建 10.24 号上线分支

首先,基于 master 分支创建新的分支,作为 10.24 号的上线分支:

git checkout master
git pull origin master  # 确保本地 master 分支是最新的
git checkout -b release-10.24  # 创建并切换到 10.24 号上线分支
2. 查找误提交的记录

在 10.17 号分支上,使用 git log 查看误提交的记录:

git checkout release-10.17  # 切换到 10.17 号上线分支
git log --oneline  # 查看提交记录

例如,你的日志输出可能如下:

456def2 增加日志功能
123abc4 修复登录问题

我们发现 456def2123abc4 是误提交到 release-10.17 分支的内容。

3. 使用 cherry-pick 将误提交内容应用到正确分支

接下来,回到 10.24 号的上线分支,通过 git cherry-pick 将误提交的内容转移到正确的分支上:

git checkout release-10.24  # 切换回 10.24 号上线分支
git cherry-pick 456def2 123abc4  # 将误提交的变更应用到 10.24 号上线分支
4. 回滚 10.17 分支的误提交

为了让 release-10.17 分支回到误提交之前的状态,我们可以使用 git reset --hard 命令回滚到指定的提交。例如,如果 abcd1234 是 10.17 上最后一个正确的提交:

git checkout release-10.17  # 切换到 10.17 号上线分支
git reset --hard abcd1234  # 回滚到没有误提交之前的状态
5. 将回滚同步到远程仓库

回滚操作只影响本地仓库,因此我们需要将回滚结果推送到远程仓库。为了防止误操作,我们可以使用 --force-with-lease 选项进行更安全的推送:

git push origin release-10.17 --force-with-lease

--force-with-lease 是一种比 --force 更安全的方式。它会确保远程分支自从你上次拉取后没有其他人修改过,这样你可以避免覆盖掉别人提交的代码。

Git 命令及其作用

以下是常用的Git命令

命令作用示例
git init初始化一个新的 Git 仓库git init
git clone <repo-url>克隆远程仓库到本地git clone https://github.com/user/repo.git
git add <file>添加文件到暂存区,准备提交git add index.html
git commit -m "<message>"提交暂存区中的文件到本地仓库,并附带提交信息git commit -m "修复登录问题"
git status查看当前工作区状态,包括已修改、暂存的文件git status
git log查看提交历史git log
git log --oneline查看简洁的提交历史(每条记录显示一行)git log --oneline
git pull从远程仓库获取最新代码并合并到当前分支git pull origin master
git push将本地提交推送到远程仓库git push origin master
git branch查看本地分支git branch
git checkout <branch>切换到指定分支git checkout feature-branch
git checkout -b <branch>创建并切换到一个新的分支git checkout -b release-10.24
git merge <branch>将指定分支的代码合并到当前分支git merge feature-branch
git reset --hard <commit-hash>回滚到指定的提交,并丢弃工作区的更改git reset --hard abcd1234
git cherry-pick <commit-hash>应用指定提交的内容到当前分支git cherry-pick 456def2
git stash暂时保存工作区的修改,以便切换分支或执行其他操作git stash
git stash pop恢复最后一次保存的暂存内容git stash pop
git rebase <branch>将当前分支的提交移到指定分支的顶端git rebase master
git remote -v查看远程仓库信息git remote -v
git branch -d <branch>删除本地分支git branch -d feature-branch
git push origin --delete <branch>删除远程分支git push origin --delete release-10.17
git push origin <branch-name> --force-with-lease强制推送本地分支到远程,但确保远程分支没有被他人修改git push origin release-10.17 --force-with-lease
说明
  • git reset --hard: 回滚到指定的提交,同时丢弃所有未提交的更改。这是一个非常强的操作,谨慎使用。
  • git cherry-pick: 可以从某个分支上挑选特定的提交,应用到当前分支,适合处理误提交的情况。
  • --force-with-lease: 这是一个相对安全的强制推送选项,它确保远程仓库中的分支自你上次拉取之后没有被别人更新过。避免直接使用 --force 覆盖别人提交的代码。

总结

通过 git cherry-pickgit reset --hard,我们可以有效地解决误提交的问题。具体步骤如下:

  1. 创建新的上线分支:基于 master 创建新的 10.24 号上线分支。
  2. 查找误提交记录:使用 git log 查找 10.17 分支上误提交的内容。
  3. 应用误提交到正确分支:通过 git cherry-pick 将误提交内容转移到 10.24 分支。
  4. 回滚错误提交:使用 git reset --hard 回滚 10.17 分支的误提交。
  5. 安全推送远程仓库:通过 git push origin <branch-name> --force-with-lease 确保回滚操作安全地同步到远程仓库。

使用这些 Git 功能,既能解决误提交的问题,又能在多人协作时避免对其他人的工作产生影响。


原文地址:https://blog.csdn.net/weixin_54574094/article/details/142983477

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!