Git 使用技巧
以下是一些 git 工作流的技巧。
如何解决与 main
的冲突
首先 rebase 到最新的 main 分支
# The first two steps can be skipped after you do it once. git remote add upstream [url to tvm repo] git fetch upstream git rebase upstream/main
git 可能会显示一些无法合并的冲突,例如
conflicted.py
。手动修改文件以解决冲突。
解决冲突后,通过以下命令将其标记为已解决
git add conflicted.py
然后你可以通过以下命令继续 rebase
git rebase --continue
最后推送到你的 fork,你可能需要在此处强制推送。
git push --force
如何将多个提交合并为一个
有时我们想要合并多个提交,特别是当后面的提交只是对前面提交的修复时,以便创建一个包含一组有意义的提交的 PR。你可以按照以下步骤进行操作。
在执行此操作之前,如果你之前没有配置过 git 的默认编辑器,请先配置。
git config core.editor the-editor-you-like
假设我们要合并最近的 3 个提交,输入以下命令
git rebase -i HEAD~3
它会弹出一个文本编辑器。将第一个提交设置为
pick
,并将后面的提交更改为squash
。保存文件后,它会弹出另一个文本编辑器,要求你修改合并后的提交消息。
将更改推送到你的 fork,你需要强制推送。
git push --force
重置到最新的 main 分支
你始终可以使用 git reset 将你的版本重置为最新的 main 分支。请注意,**你所有的本地更改都将丢失**。因此,仅在你没有本地更改或你的 pull request 刚被合并时才执行此操作。
git fetch origin main
git reset --hard FETCH_HEAD
在重置后恢复之前的提交
有时我们可能会错误地将分支重置为错误的提交。当发生这种情况时,你可以使用以下命令显示最近提交的列表
git reflog
一旦你获得正确的哈希值,你可以再次使用 git reset 将 head 更改为正确的提交。
仅将最新的 k 个提交应用到 main 分支
有时,仅将你最新的 k 个更改应用到 main 分支之上很有用。这通常发生在你还有其他 m 个提交已在这些 k 个提交之前合并的情况下。直接 rebase 到 main 分支可能会导致这些前 m 个提交(可以安全地丢弃)上出现合并冲突。
你可以改为使用以下命令
# k is the concrete number
# Put HEAD~2 for the last 1 commit.
git rebase --onto upstream/main HEAD~k
然后你可以强制推送到 main 分支。请注意,以上命令将丢弃最后 k 个提交之前的所有提交。
强制推送的后果是什么
前两个技巧需要强制推送,这是因为我们更改了提交的路径。强制推送到你自己的 fork 是可以的,只要更改的提交仅是你自己的即可。