提升编程效率:软件工程师必备的10个Git命令

本文翻译自 10 Must-Know Git Commands for Software Engineers,作者: Rabi Siddique, 略有删改。

Git和GitHub是每个软件工程师必须知道的最基本的东西。这些工具是开发人员日常工作的组成部分,因为我们每天都与它们互动。熟练掌握Git不仅可以简化你的工作,还可以显著提高工作效率。在这篇博客文章中,我们将探索一组命令,可以大幅提升你的生产效率。随着你对这些命令变得更熟练,你将节省宝贵的时间,并成为一个更有效率的软件工程师。

Git常用术语

现在,在我们探索Git命令之前,让我们熟悉一些基本的Git术语。以帮助您更好地理解命令,避免在本博客的后面部分使用这些术语时产生困惑。

在Git中,HEAD是一个特殊的指针/引用,它总是指向当前分支中的最新提交。当你进行一个新的提交时,HEAD向前移动指向那个新的提交。例如,如果你在main分支上进行了一次新的提交,HEAD现在会指向这个新提交,表明它是main分支中最近的一次提交。

^

Git中的^符号是浏览项目历史时间轴的一种方式。当你使用HEAD^时,它会引用你当前提交之前的提交。如果你在^后面加上一个数字,比如HEAD^2,它会引用你当前提交之前的第二个提交。简而言之,^符号允许您在项目历史中向后遍历,而数值允许您精确确定希望返回的提交数量。

Staging

Staging是你组装你想包含在下一次提交中的更改的地方。Staging允许你仔细地管理你的提交,使它更容易审查,组织和完善你的修改。通过staging您可以控制提交中包含的内容。要暂存更改可以使用git add命令,这类似于声明:"我希望这些更改成为我下一次提交的一部分。"

现在让我们逐一探索10个Git命令。

1.同时添加和提交文件

在Git中,我们通常使用git add *命令来暂存所有修改过的文件,以便后续提交。然后我们使用git commit -m "commitMessage"命令提交这些更改。然而有一个更精简的命令可以在一个步骤中完成这两项任务:

sql 复制代码
git commit -am "commitMessage"

-am标志不仅允许我们暂存这些更改,还允许我们在一个有效的操作中提交这些更改。

2.创建并切换到Git分支

与前面的场景类似,还有一个命令将这两个命令的功能结合在一起。与使用两个单独的命令(git branch branchName创建一个分支,然后使用git checkout branchName切换到该分支)不同,您可以使用以下命令在一个步骤中完成这两个任务:

css 复制代码
git checkout -b branchName

使用-b命令的git checkout标志不仅可以创建一个新的分支,还可以立即将您切换到该分支。

3.删除Git分支

要在Git中删除一个分支,可以使用git branch -dgit branch -D命令。-d选项用于安全删除,仅当分支已完全合并到当前分支中时才删除该分支。-D选项用于强制删除,这将删除分支,而不管它是否完全合并。以下是命令:

安全删除(检查合并):

git branch -d branchName

强制删除(不检查合并):

git branch -D branchName

4.重命名Git分支

要重命名分支,可以使用git branch -m命令,后跟当前分支名称和新的所需分支名称。例如如果你想将一个名为oldBranch的分支重命名为newBranch,你可以运行:

git branch -m oldBranch newBranch

如果要重命名当前正在工作的当前分支,而不指定旧名称,则可以使用以下命令:

git branch -m newBranchName

在这里您不需要指定旧的分支名称,因为Git会假设您想将当前分支重命名为新名称。

5.取消暂存特定文件

有时您可能希望从暂存区域中删除特定文件,以便在提交之前进行其他修改。

perl 复制代码
git reset filename

这将取消暂存该文件,同时保持您的更改不变。

6.放弃对特定文件的更改

如果您想完全放弃对特定文件所做的更改,并将其恢复到上次提交的状态,请使用:

lua 复制代码
git checkout -- filename

此命令可确保文件返回到以前的状态,撤消最近的任何修改。这是一种很有帮助的方法,可以在不影响其他更改的情况下对特定文件重新开始。

7.更新上次Git提交

想象一下你刚刚在Git仓库中进行了提交,但是后来你意识到你忘记了在那个提交中包含一个修改,或者你想修改提交内容本身。你不想为这个小改动创建一个全新的提交。相反,你想把它添加到前一个提交中。以下就是你可以使用的命令:

sql 复制代码
git commit --amend -m 'message'

此命令修改您最近提交的内容。它将任何阶段性更改(您使用git add添加的更改)与您的新注释组合在一起,以创建更新的提交。

需要记住的一点是,如果你已经将提交推送到远程仓库,你需要使用git push --force强制推送更改来更新远程分支。因为一个标准的git push操作会向你的远程仓库追加一个新的提交,而不是修改最后一个提交。

8.存储更改

假设你在两个不同的分支上工作,A和B。在分支A中进行更改时,您的团队要求您修复分支B中的一个bug。当你尝试使用git checkout B切换到分支B时,Git会阻止它,并显示一个错误:

我们可以按照错误消息的建议提交更改。但承诺更像是一个固定的时间点,而不是一个正在进行的工作。这是我们可以应用错误消息的第二个建议并使用stash特性的地方。我们可以使用这个命令来存储我们的更改:

git stash

git stash临时保存您尚未准备好提交的更改,允许您切换分支或处理其他任务,而无需提交未完成的工作。

要在我们的分支中重新应用隐藏的更改,您可以使用git stash applygit stash pop。这两个命令都恢复最新的隐藏更改。Stash应用只是恢复更改,而pop恢复更改并将其从stash中删除。

9.恢复Git提交

假设你正在处理一个Git项目,你发现一个特定的提交引入了一些不希望的更改。您需要在不从历史记录中删除提交的情况下撤销这些更改。您可以使用以下命令来撤消该特定提交:

git revert commitHash

这是一种安全且非破坏性的方式来纠正项目中的错误或不必要的更改。

例如你有一系列的提交:

  • Commit A
  • Commit B (此处引入了不需要的更改)
  • Commit C
  • Commit D

要反转Commit B的效果,可以运行:

git revert commitHashOfB

Git将创建一个新的提交,我们称之为Commit E,它否定了Commit B引入的更改。提交E成为分支中的最新提交,项目现在反映了如果提交B从未发生过的状态。

如果你想知道如何检索一个提交哈希,使用git reflog很简单。在下面的屏幕截图中,突出显示的部分表示您可以轻松复制的提交哈希:

10.重置Git提交

让我们假设您已经提交了一个项目。然而在检查后,您意识到需要调整或完全撤销最后一次提交。对于这种情况,Git提供了以下强大的命令:

Soft reset

css 复制代码
git reset --soft HEAD^

这个命令允许你回溯你的最后一次提交,同时保留你在暂存区中的所有更改。简单地说,您可以使用此命令轻松地取消提交,同时保留代码更改。当您需要修改上一次提交时,这个命令非常方便。

Mixed reset

css 复制代码
git reset --mixed HEAD^

这是使用git reset HEAD^而不指定--soft--hard时的默认行为。它取消提交最后一次提交,并从暂存区中删除其更改。但是它会将这些更改保留在工作目录中。当你想取消提交最后一次提交并从头开始进行更改,同时在重新提交之前将更改保留在工作目录中时,这很有帮助。

Hard reset

css 复制代码
git reset --hard HEAD^

git reset --hard HEAD^会从Git历史记录中完全删除最后一次提交沿着的所有相关更改。当你使用git reset --hard HEAD^时,就没有回头路了。所以当你想永久放弃最后一次提交和它的所有修改时,要非常小心地使用它。

感谢您的阅读,希望这篇文章对你有帮助,可以帮助你提高工作效率。


看完本文如果觉得有用,记得点个赞支持,收藏起来说不定哪天就用上啦~

专注前端开发,分享前端相关技术干货,公众号:南城大前端(ID: nanchengfe)

相关推荐
Estar.Lee几秒前
查手机号归属地免费API接口教程
android·网络·后端·网络协议·tcp/ip·oneapi
y先森26 分钟前
CSS3中的伸缩盒模型(弹性盒子、弹性布局)之伸缩容器、伸缩项目、主轴方向、主轴换行方式、复合属性flex-flow
前端·css·css3
前端Hardy26 分钟前
纯HTML&CSS实现3D旋转地球
前端·javascript·css·3d·html
susu108301891129 分钟前
vue3中父div设置display flex,2个子div重叠
前端·javascript·vue.js
IT女孩儿2 小时前
CSS查缺补漏(补充上一条)
前端·css
2401_857610032 小时前
SpringBoot社团管理:安全与维护
spring boot·后端·安全
凌冰_2 小时前
IDEA2023 SpringBoot整合MyBatis(三)
spring boot·后端·mybatis
码农飞飞2 小时前
深入理解Rust的模式匹配
开发语言·后端·rust·模式匹配·解构·结构体和枚举
一个小坑货2 小时前
Rust 的简介
开发语言·后端·rust