方便的 Git 命令和实践可改善您的工作流程
术语定义
命令
最佳实践
资源
赞助商
在过去一年半的大部分时间里,我一直积极从事软件开发。在此期间的大部分时间里,我逐渐意识到 Git 的强大,尤其是在疫情爆发以来,我 90% 的时间都在远程工作,这项技术对我的职业发展至关重要。
这篇文章旨在重点介绍我日常使用的一些常用 Git 命令,我相信大多数读者在某个时候都会用到这些命令,或者已经用到了。这篇文章也旨在解构“Git 很复杂”这一观念。希望你能对它有新的认识。让我们开始吧……
本文分为四个部分:
*披露:我推荐的产品均为我自己会用,所有观点均为个人观点。本文可能包含联盟链接,我可能会从中赚取少量佣金,但您无需支付额外费用。
术语定义
在我们开始学习命令之前,熟悉 git 世界中的常用术语非常重要。
我们来看看其中的一些。
- Git - 它是一个分布式版本控制系统,用于跟踪任何文件集,以便开发人员之间进行协调。简而言之,它就像一个项目储蓄计划。它可以跟踪和记录您对文件或文件集随时间所做的更改,版本控制系统使您能够通过对项目中的每个修订版本创建快照来审查甚至恢复早期版本。您可以在需要时访问这些版本进行比较和修改。
- Git 仓库托管服务 - 这些是包装并增强版本控制系统的第三方 Web 应用程序。一些流行的例子包括 Github、Bitbucket 和 Gitlab。许多人将它们与 Git 混淆。然而,它们完全不同。那么,它们之间的联系是否比 Java 和 JavaScript 更加紧密?是的,Git 是 Github 等平台用来管理仓库的底层技术。有关这方面的更详细说明,请参阅这篇文章。
- Git 分支- 分支代表项目的独立开发线。例如,如果您正在开发一项涉及创建管理仪表板的功能,您可以选择创建一个名为 的分支,并
dashboard
在其中处理所有仪表板逻辑。 - HEAD - 使用 Git 时,一次只能检出一个分支,这就是所谓的“HEAD”分支。通常,它也被称为“活动”或“当前”分支。Git 会将这个当前分支记录在 Git 仓库中的一个文件 .git/HEAD 中。(这是一个内部文件,因此不应手动操作!)。现在你可能已经注意到,树是 git 中的符号表示😄。
命令
- git init
- 此命令创建一个新的 Git 仓库。它可用于将现有的、未版本控制的项目转换为 Git 仓库,或初始化一个新的空仓库。-
-git remote add origin {remote_url}
将仓库连接到远程 git URL。例如:git remote add origin https://github.com/tngeene/Dadjokes-app.git
git remote -v
- 检查特定 repo 上设置的远程 URL。一个 repo 可以有多个远程 URL,例如,你将代码推送到 Github 和 Bitbucket 这两个平台。git remote remove origin
或git remote rm origin
- 删除一个遥控器- 或者,您可以使用
git remote set-url origin {new.url.here}
此命令自动删除旧远程服务器并分配新的远程服务器。在上面的示例中,您可能会意识到自己犯了一个错误并设置了错误的源。使用第二种删除源服务器的方法(第一种方法非常简单,我就不深入探讨了),您可以运行此命令git remote set-url origin https://github.com/tngeene/Bakery-template.git
,这将删除先前指定的 URL 并设置新的 URL。
- 或者,您可以使用
git rm -r --cached .
- 当您想要取消跟踪文件时,这个命令就派上用场了,比如您意识到您想将其添加到.gitignore
已被跟踪的文件中。- rm :删除命令。
- -r:允许递归删除。
- — cached :只会从索引中删除文件。您的文件仍会保留在那里。
.
:取消跟踪所有文件。您可以通过以下方式取消跟踪特定文件:git rm -r --cached {path_to_ file}
git clone
- 用于将远程仓库的内容传输到本地机器。通常用于您最初没有代码的情况。git clone {url_of_repo}
例如,示例用法如下git clone https://github.com/tngeene/fibonacci-sequence-react.git
git fetch
- 实际上只是从远程存储库下载新数据 - 但不会将任何新数据集成到您的工作文件中。Fetch 非常适合从新视角查看远程存储库中发生的所有事情。-
git pull
- 则与之相反,它的目标有所不同:使用HEAD
远程服务器的最新更改来更新当前分支。这意味着 pull 不仅会下载新数据,还会将其直接集成到当前的工作副本文件中。这会带来以下几个后果:- 由于
git pull
尝试将远程更改与本地更改合并,因此可能会发生所谓的“合并冲突”。
- 由于
使用的语法
git pull {remote_branch_name} {feature_branch_name}
- 例如git pull origin master
可以使用git pull —set-upstream {remote_branch_name} {feature_branch_name}
。这种语法避免了每次都指定要更新的远程分支,例如,您只需在主分支中签出后git pull —set-upstream origin master
键入即可。git pull
git push
- 将本地计算机上的代码推送到远程分支。语法与上面突出显示的 git pull 命令相同。
需要注意的是,对于初始仓库,尤其是使用 README 文件初始化的仓库,可能会出现错误,例如远程仓库包含您没有的内容。另一个错误可能是该仓库包含不相关的历史记录。因此,在推送代码之前,请确保先通过指定以下命令从远程仓库拉取代码git pull origin master —allow-unrelated-histories
git branch
- 允许创建一个新的分支。其语法为git branch -f {branch} {start_point}
:
git branch - f updates master
git checkout
git checkout 命令允许你在它创建的分支之间导航git branch
。例如,如果我们想导航到上面创建的更新分支,只需运行git checkout updates
。在签出时需要注意的是,确保我们已经在要签出的分支中提交了我们正在处理的更改。- 使用
git checkout
命令,还可以创建一个新分支并立即签出到该分支,只需一个命令!那么你可能会问,我们该怎么做呢?只需git checkout -b {branch_name}
在当前工作分支中输入 即可。在我们上面的例子中,git checkout -b updates
。这将自动将当前分支中所有现有的更改合并到新创建的分支中。
- 使用
git add
- 现在你已经完成了所有有趣的工作,你需要将它们推送到我们用git add remote origin
命令设置的远程源。该git add
命令是该过程的第一部分。此命令将工作目录中的更改添加到暂存区。它告诉 Git 你想在下一次提交中包含对特定文件的更新。有两种方法可以将要推送的文件添加到远程。git add .
此命令会将您所做的所有更改添加到推送到远程时。.
末尾的 表示您要暂存所有文件。git add {path_to_file_you_want_to_stage}
- 此命令允许您指定要暂存提交的更新。例如,如果您只想更新设置文件,则只需输入git add ./settings.py
git commit
- 最后,当您添加完所有更改后,您需要保存它们,以便在决定推送到远程仓库时将它们包含在内。此命令会将更改保存到本地计算机。- 此提交的语法包括包含一条消息来描述您正在进行的更改,例如,在修复表单上的登录逻辑的错误之后,可以选择使用此提交。
git commit -m "fixed email validation on login API"
-m 标志表示消息
- 此提交的语法包括包含一条消息来描述您正在进行的更改,例如,在修复表单上的登录逻辑的错误之后,可以选择使用此提交。
It is important to write informative commit messages so
those other people who are working on the branch know
exactly what you were working on(just as it's important to
use descriptive variable names 😉).
git merge
- 在处理完新签出的分支中的所有更改后,您可能希望先将所有更改合并到主分支,然后再将其推送到远程分支。在功能分支上提交后,运行该命令git checkout {branch_you_want_to_checkout_to}
,然后运行git merge {feature_branch_name}
。在上面的示例中,如果我们想将所做的更改合并到主分支,我们将执行以下步骤
git checkout main
git merge updates
git log
- 此命令允许您查看有关以前提交的信息。它仅显示导致当前工作分支的当前状态的提交。
恢复到之前的提交。
很多时候,你可能会意识到自己犯了一个错误,并希望回滚到项目更稳定的版本。幸运的是,git 提供了解决这个问题的方法。我们可以选择使用git revert
或git reset
命令。在本指南中,我将使用git revert
,因为我有更多使用经验。但是,如果想深入分析和比较这两个命令,你可以参考atlassian 的这篇文章。
回滚的第一步是确定你想回滚到哪个点。为此,我们将使用我们的朋友, 注意提交历史记录的顺序,“HEAD”是列表中的第一个。如果我们想回到带有“reverted to ssr”消息的提交,我们可以运行git log
git revert --no-commit 4eab63b2..HEAD
git commit
这会将 HEAD 中的所有内容还原回提交哈希值,这意味着它会在工作树中重新创建该提交状态,就像 4eab63b2 之后的所有提交都已回溯一样。然后,您可以提交当前树,它将创建一个全新的提交,本质上等同于您“还原”到的提交。
该--no-commit
标志允许 git 一次性还原所有提交。
请注意,我们使用了我们想要回滚到的提交的提交哈希。
当然,恢复的方法不止一种,但对我来说,这是最有效的。欢迎在评论区留言,讨论恢复的最佳实践。
最佳实践
使用 git 时,遵循一些实践至关重要,尤其是在团队协作中。我提到的这些实践仅代表我个人的偏好,不代表我的观点。
使用描述性提交消息
让参与项目的其他开发人员了解您一直在进行的工作非常重要。编写提交消息(例如“修复着陆页上的加载器”)而不是“着陆页更新”)对于告知代码审阅者您所进行的工作大有帮助。
发起拉取请求
如果在功能分支上将更改推送到 Github,请记得发起拉取请求(在 GitLab 中称为合并请求)。这将通知项目所有者,请他们将更改集成到主分支,以便进行代码审查。
写一个信息丰富的拉取请求消息。
不过,关于拉取请求,务必让代码审阅者了解你希望将代码合并到主分支的原因。拉取请求消息的示例如下:
This commit contains updates on the user registration logic
1. Fixed signup form validation by adding error handling
2. Added vee-validate on login and registration forms
3. Updated redirection on successful signup
4. Integrated social auth as a signup option (using google and Facebook)
保持最少的提交修订
作为一名极简主义者,我认为最好是逐段处理代码并推送,而不是对多个文件进行修改并一次性推送。我之所以这样认为,是因为这样可以提供良好的跟踪,万一出现问题,我们可以回滚到提交时,只撤销几个文件上的小错误,而不是多个文件上的小错误,因为后者可能会变成一场噩梦。
本文到此结束。关于 Git 的信息量很大,但目前我们只深入 Git 的浅层知识。希望这篇文章能对大家有所帮助,欢迎留言分享你的想法。你也可以访问我的网站或在Twitter上关注我。
包含gitignore
文件
在项目开发过程中,有些目录和文件你不希望 git 跟踪,也有一些文件不建议跟踪,例如node_modules
node.js 中的文件。这有助于减少样板代码,因为这些文件仍然会在其他开发人员的机器上重新创建。我发现了一个有趣的 GitHub 仓库,其中包含适用于大多数框架和语言的常用 .gitignore 模板列表。
资源
本节重点介绍一些有助于您入门 git 的有用资源。其中包括视频、博客文章和播客。
- Freecodecamp 的Git 和 GitHub YouTube 课程
- gitignore 模板集合
- Ladybug 关于git 和 github 的播客节目
- Devmountain 对git 和 github 区别的讲解
- 官方git 文档
- Edureka 的YouTube git 课程
赞助商
- 您是否需要一个地方来托管您的网站或应用程序,Digital Ocean正是您需要的解决方案,使用此链接在 Digital Ocean 上注册并体验最好的云服务提供商。
- 成为一名开发人员的旅程可能漫长而充满煎熬,幸运的是,Pluralsight让学习变得更容易。他们提供种类繁多的课程,并拥有顶级的培训师,我个人对此深信不疑。使用此链接注册,即可享受首次课程 50% 的折扣。
- Scraper API是一家专注于提供策略的初创公司,旨在帮助您在网页抓取过程中免遭 IP 地址封锁的困扰。他们利用 IP 轮换技术,帮助您规避检测。Scraper API 拥有超过 2000 万个 IP 地址和无限带宽。结合使用 Scraper API 和2captcha等工具,您将比其他开发者更具优势。两者可以结合使用,实现流程自动化。注册 Scraper API 并使用此链接,即可享受首次购买 10% 的折扣。
感谢您阅读本文。希望您能以某种方式更好地理解 Git。谢谢!
鏂囩珷鏉ユ簮锛�https://dev.to/tngeene/handy-git-commands-and-practices-to-improve-your-workflow-4j5p