git 命令git 地址
如果您今天是一名开发人员,那么您很可能已经学到了Git,它是现代软件工作流程的核心版本控制系统。 您了解基础知识-存储库如何工作,如何创建分支和提交更改以及如何合并这些更改和请求。
但是,现在您已经了解了基础知识,是时候进行一些升级了,以利用工作流程中Git的一些更强大的功能。 这里有五种高级Git功能,这些都是您当前和未来开发工作的一部分。
[ 同样在InfoWorld上:您将犯下的6个Git错误-及其解决方法 ]
使用git rebase
简化提交历史
当项目中有两个分支(例如,开发分支和主分支)时,这两个分支都需要合并更改,那么git merge
命令是将它们统一的自然而直接的方法。 merge
将一个分支的开发历史记录作为对另一个分支的合并提交。 尽管这可以完整保留两个历史记录,但可能会使项目的整体历史记录难以掌握。 在某些情况下,您可能希望获得更简单,更干净的结果。
git rebase
命令也合并了两个分支,但是做了一些不同。 git rebase
重写了一个分支的提交历史记录,以便将另一个分支从创建分支的位置合并到该分支中。 这样可以减少该分支的嘈杂且线性的提交历史记录。 但这也意味着删除了有关其他分支和合并过程的潜在有用细节。
为此,当您有多个私有分支想要合并到公共分支之前,将其合并为一个干净的提交历史记录时,最好使用rebase
。 这样,您将获得rebase
的全部好处-使提交历史变得更线性且噪音更少-无需模糊有关项目提交历史的关键细节。
使用git merge --squash
清理git merge --squash
另一种进行合并和后续提交的方法可以减少噪音,这是通过在git merge
使用--squash
选项 。 --squash
从传入分支获取所有提交,并将它们展平为单个合并的提交。
压缩合并的好处在于,您可以选择如何应用生成的暂存文件。 您可以只提交整个更改集,也可以一次提交几个文件,而这些更改都紧密相关。 如果传入分支的提交历史记录仅在该分支的上下文中有用,或者如果它来自私有分支(无论如何将被丢弃),则压缩合并也很有用。
与rebase
,此技术最适合将内部分支提交给master,但如果需要,它也适用于请求请求。
使用git bisect
加快错误搜索
代码中的微妙回归是最难理解的。 想象一下,您刚刚在代码库中添加了一个测试来查找错误,但是您不确定该错误何时首次出现……并且您的存储库中有成百上千的提交。 git bisect
命令使您可以大大减少查找导致该错误的提交所必须搜索的代码量。
启用bisect
( git bisect start
)时,您在代码库中指定了两个要绑定搜索的点:一个知道不好的地方(通常是HEAD
),另一个知道事情还不错的地方。 bisect
将在不良提交和良好提交之间检出一份提交,并让您运行测试。 重复执行此二进制细分过程,直到出现破坏事件的提交为止。
git bisect
是具有悠久而复杂的提交历史的大型代码库的天赐之物,为您省去了每次上一次提交的麻烦,希望您早晚发现错误。 最起码,它通过搜索和测试,你需要做的半量减少了。
重新应用git cherry-pick
提交
许多高级git
命令仅在特定情况下才有用,即使是中高级用户也可以安全地忽略它们。 但是,当您遇到这些特定情况之一时,了解它们是值得的。
考虑一下git cherry-pick
。 它使您可以进行给定的提交-来自任何分支的任何提交-并将其应用到其他分支,而不必应用该提交历史记录中的任何其他更改。 这在一些关键情况下很有用:
- 您对错误的分支进行了提交,并且想要将其快速应用于正确的分支。
- 您要在分支上对中继应用修补程序,然后再继续进行有关中继代码的其他工作。
请注意,除了在选择cherry-pick
时直接应用提交之外,您还有其他选择。 例如,如果传递--no-commit
选项,则经过精心挑选的提交将放置在当前分支的暂存区域中。
[ 同样在InfoWorld上:Git和GitHub用户的27个基本技巧 ]
使用Git子模块优雅地组织项目
就像大多数编程语言提供了导入包或模块的方式一样,Git提供了一种将一个存储库的内容自动包含在另一个存储模块(子模块)中的方法 。 您可以在存储库内创建一个子目录,并自动使用另一个存储库的内容填充该子目录,通常出于一致性考虑,通常通过引用特定的提交哈希值来填充它。
请注意,Git子模块在以下情况下效果最佳:
- 有问题的子模块不会经常更改,或者它们被锁定为特定的提交。 在子模块的任何工作,而不是一个子模块,应单独管理。
- 每个人都在使用支持子模块并了解使用它们的步骤的Git版本。 例如,子模块目录并不总是自动用子模块存储库的内容填充。 您可能需要在
git submodule update
上使用git submodule update
命令来使所有内容保持最新。
翻译自: https://www.infoworld.com/article/3561098/5-advanced-git-commands-to-up-your-git-game.html
git 命令git 地址