如果你想撤销本地的提交,并在切换到另一个分支之后再重新提交这些更改,可以按照以下步骤操作。我们假设你的当前分支是 main,并且你想切换到 feature 分支然后再重新提交你的更改。

1. 查看提交历史

首先,查看你当前分支的提交历史,以确认你想撤销的提交。

git log --oneline
  • 1.

git撤回本地commit,切换分支再提交_工作区

假设你有以下提交历史:

49349d4 Latest commit
af50e1b Previous commit
33295ba Earlier commit
  • 1.
  • 2.
  • 3.
2. 使用 git reset 撤销提交

保存更改,撤销提交:

git reset --soft HEAD~1
  • 1.

HEAD~1 表示上一条提交。--soft 选项保留你的更改在暂存区,这样你可以在不同分支中重新提交。

执行完成后会发现,已经提交的文件回到了暂存区

git撤回本地commit,切换分支再提交_工作区_02

3. 切换到目标分支

如果目标分支已经存在:

git checkout feature // 或者git sw feature
  • 1.

如果目标分支不存在,可以通过以下命令创建并切换到新分支:

git checkout -b feature // 或者git sw -c feature
  • 1.
4. 提交更改

现在你已经在目标分支上,并且你的更改仍然保留在暂存区。你可以重新提交这些更改:

git commit -m "Your commit message"
  • 1.
5. 检查结果

查看新的分支提交历史,确认更改已经提交:

git log --oneline
  • 1.
示例完整流程
  1. 查看提交历史:
git log --oneline
  • 1.
  1. 撤销最近的提交,保留更改:
git reset --soft HEAD~1
  • 1.
  1. 切换到目标分支(假设目标分支为 feature)并创建该分支:
git checkout -b feature
  • 1.
  1. 重新提交更改:
git commit -m "Your commit message"
  • 1.
  1. 查看新的提交历史:
git log --oneline
  • 1.
注意事项
  • 使用 git reset --soft 可以保留更改在暂存区。如果你不想这一步暂存这些更改,可以使用 git reset --mixed,它会保留更改在工作区(工作目录),但不会在暂存区。
  • git checkout -b feature 命令会创建并切换到 feature 分支。如果 feature 分支已经存在,请直接使用 git checkout feature
其他方法:使用 git stash

有时,你可以使用 git stash 暂时存储更改,然后切换分支并应用更改:

  1. 储藏更改:
git stash
  • 1.
  1. 切换到目标分支:
git checkout feature
  • 1.
  1. 应用储藏的更改:
git stash
  • 1.
  1. 重新提交更改:
git commit -m "Your commit message"
  • 1.

这会将未提交的更改储藏起来,切换分支后重新应用这些更改,并在目标分支上提交。选择最适合您工作流程的方法。