Git 使用技巧
以下是一些关于git工作流程的建议。
如何解决与main分支的冲突
首先将代码变基到最新的主分支
# 前两步在完成一次后可以跳过。 git remote add upstream [url to tvm repo] git fetch upstream git rebase upstream/main
git可能会显示一些它无法合并的冲突,比如
conflicted.py。手动修改文件以解决冲突。
解决冲突后,通过以下方式将其标记为已解决
git add conflicted.py
然后你可以继续通过以下命令进行变基操作
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
重置到最新的主分支
你可以随时使用git reset将你的版本重置到最新的主分支。 请注意所有本地更改将会丢失。 因此,请仅在没有任何本地更改或你的拉取请求刚被合并时执行此操作。
git fetch origin main
git reset --hard FETCH_HEAD
在重置后恢复之前的提交
有时我们可能会错误地将分支重置到错误的提交。 当这种情况发生时,您可以使用以下命令显示最近的提交列表
git reflog
一旦获取到正确的哈希标签,你可以再次使用git reset将head指向正确的提交。
仅将最新的k次提交应用到主分支
有时,仅将您最近的k次变更应用到主分支上是有用的。 这种情况通常发生在您有其他m次提交已经合并到主分支, 而这些k次提交之前。直接对主分支进行变基可能会导致前m次提交出现合并冲突 (这些冲突可以安全地丢弃)。
你可以改用以下命令
# k is the concrete number
# Put HEAD~2 for the last 1 commit.
git rebase --onto upstream/main HEAD~k
然后你可以强制推送到主分支。请注意,上述命令将丢弃最后k个提交之前的所有提交。
强制推送的后果是什么
前两个技巧需要使用强制推送(force push),这是因为我们修改了提交的路径。只要更改的提交仅属于你自己,强制推送到你自己的fork仓库是可以的。