Skip to the content.

Git 实战(3):高级操作和最佳实践

1. 引言

欢迎来到《Git 实战之九阴真经》的第三篇文章。在这一篇文章中,将继续与程序员朋友们分享一些 Git 的高级操作和最佳实践。通过这些内容,希望你能在 Git 的使用上更上一层楼,提高代码管理和协作效率。

1.1 为什么需要高级操作?

在日常的开发过程中,除了基本的提交、分支操作外,常常需要进行一些更复杂的操作来满足项目需求。比如:

这些高级操作可以帮助我们更好地管理代码库,提高开发效率。

1.2 高级操作的优势

掌握 Git 的高级操作和最佳实践,可以带来以下优势:

2. Stash 操作

在开发过程中,有时需要临时保存当前的工作进度,以便切换到其他任务。Git 提供了 git stash 命令,可以将当前的修改保存到一个栈中,并恢复工作区的干净状态。

2.1 使用 Stash

使用 git stash 命令可以将当前的修改保存到栈中。

git stash

要查看所有的 Stash,可以使用:

git stash list

要应用最新的 Stash,可以使用:

git stash apply

要应用指定的 Stash,可以使用:

git stash apply stash@{<编号>}

要删除指定的 Stash,可以使用:

git stash drop stash@{<编号>}

实战练习:

git stash
git stash list
git stash apply

2.2 使用 Stash 进行分支切换

在进行分支切换时,如果当前分支有未提交的修改,可以使用 git stash 命令临时保存修改,然后切换分支,完成任务后再恢复修改。

实战练习:

git stash
git checkout main
git checkout feature-login
git stash apply

2.3 最佳实践

3. 修改最近一次提交记录

在开发过程中,有时需要修改最近一次提交的记录,例如更正提交信息或添加遗漏的文件。可以使用 git commit --amend 命令来实现。

3.1 修改提交信息

使用 git commit --amend 命令可以修改最近一次提交的提交信息。

git commit --amend

运行此命令后,Git 会打开默认的文本编辑器,允许你编辑提交信息。保存并关闭编辑器后,新的提交信息将替换最近一次提交的信息。

实战练习:

git commit --amend

3.2 添加遗漏的文件

如果在最近一次提交中遗漏了一些文件,可以先使用 git add 命令添加这些文件,然后使用 git commit --amend 命令将它们包含到最近一次提交中。

git add <遗漏的文件>
git commit --amend

实战练习:

git add <遗漏的文件>
git commit --amend

3.3 最佳实践

4. 交互式 Rebase

交互式 Rebase 是 Git 提供的一种强大的工具,可以对提交历史进行修改合并重排等操作。它可以帮助我们清理提交历史,使其更加简洁和有序。

4.1 使用交互式 Rebase

使用 git rebase -i 命令可以进入交互式 Rebase 模式,对指定范围内的提交进行操作。

git rebase -i <base>

例如,要对当前分支从 main 分支以来的所有提交进行交互式 Rebase,可以使用:

git rebase -i main

进入交互式 Rebase 编辑器后,可以对提交进行以下操作:

实战练习:

git rebase -i HEAD~3

4.2 解决 Rebase 冲突

在进行交互式 Rebase 时,可能会遇到冲突。解决冲突的步骤与合并冲突类似:

  1. 查看冲突文件:在终端中输入 git status 查看冲突文件。
  2. 手动解决冲突:打开冲突文件,手动修改冲突部分,并删除冲突标记(<<<<<<<=======>>>>>>>)。
  3. 添加解决后的文件:解决冲突后,使用 git add <file> 添加文件。
  4. 继续 Rebase:使用 git rebase --continue 继续 Rebase 过程。

实战练习:

git status
# 手动解决冲突
git add <冲突文件>
git rebase --continue

4.3 Rebase 之后的远程推送操作及注意事项

完成 Rebase 后,如果需要将本地的修改推送到远程仓库,通常需要使用 --force 选项来强制推送,因为 Rebase 修改了提交历史,与远程仓库的历史不一致。

git push origin <分支名称> --force

注意事项:

  1. 谨慎使用 --force:强制推送会覆盖远程仓库的历史,其他开发者可能会因此遇到问题。在推送前,确保与团队成员沟通,确认没有问题后再进行操作。
  2. 备份重要分支:在进行 Rebase 和强制推送前,建议备份重要分支,以防出现意外情况。
  3. 使用 --force-with-lease:相比于 --force--force-with-lease 更安全一些,它会在推送前检查远程分支的状态,如果远程分支有新的提交,会拒绝推送,防止意外覆盖他人的工作。
git push origin <分支名称> --force-with-lease

4.4 最佳实践

5. Cherry-pick 操作

Cherry-pick 是 Git 提供的另一种强大的工具,可以将特定的提交应用到其他分支。它可以帮助我们在不同分支之间挑选和应用特定的变更。

5.1 使用 Cherry-pick

使用 git cherry-pick 命令可以将指定的提交应用到当前分支。

git cherry-pick <提交哈希>

例如,要将 feature-login 分支上的一个特定提交应用到 main 分支,可以使用:

git checkout main
git cherry-pick <提交哈希>

实战练习:

git checkout main
git cherry-pick <提交哈希>

5.2 解决 Cherry-pick 冲突

在进行 Cherry-pick 时,可能会遇到冲突。解决冲突的步骤与合并冲突和 Rebase 冲突类似:

  1. 查看冲突文件:在终端中输入 git status 查看冲突文件。
  2. 手动解决冲突:打开冲突文件,手动修改冲突部分,并删除冲突标记(<<<<<<<=======>>>>>>>)。
  3. 添加解决后的文件:解决冲突后,使用 git add <file> 添加文件。
  4. 继续 Cherry-pick:使用 git cherry-pick --continue 继续 Cherry-pick 过程。

实战练习:

git status
# 手动解决冲突
git add <冲突文件>
git cherry-pick --continue

5.3 最佳实践

6. 结语

在本篇文章中,总结了个人在 Git 高级操作和最佳实践中的经验,包括 Stash 操作、修改最近一次提交记录、交互式 RebaseCherry-pick 操作。通过这些高级操作,希望你能够更好地管理代码库,提高开发效率。在接下来的文章中,我们将探讨 Git Flow 和实战项目案例,期待与你继续交流。

本专栏文档及配套代码的 GitHub 地址:壹刀流的技术人生