Git和GitHub是每位软件工程师都必须了解的最基本的东西。这些工具是开发人员日常工作的组成部分,因为我们每天都要与它们进行交互。熟练掌握Git不仅能简化您的生活,还能显著提高生产力。在这篇博文中,我们将探索一组命令,这些命令将大大提高您的生产力。随着您对这些命令的掌握越来越熟练,您将节省宝贵的时间,成为更有效的软件工程师。
Git词汇
现在,在我们一个一个地探索Git命令之前,让我们先熟悉一些基本的Git术语。这不仅可以帮助您更好地理解这些命令,还可以防止在本博客的后续部分使用这些术语时出现混淆。
HEAD
在Git中,HEAD
是一个特殊的指针/引用,它始终指向当前分支中的最新提交。当您进行新提交时,HEAD
会向前移动以指向该新提交。例如,如果您在main
分支上并进行了新提交,则HEAD
现在将指向该新提交,表示它是main
分支中最新的提交。
^(插入符号)
Git中的^
符号用作浏览项目历史时间线的一种方式。当您使用HEAD^
时,它引用紧接在当前提交之前的提交。如果在^
后附加一个数字,例如HEAD^2
,则它引用当前提交之前的第二个提交。简而言之,^
符号允许您向后遍历项目历史,而数字值允许您精确确定希望回退的提交数量。
暂存
暂存是您汇集要包含在下一次提交中的更改的地方。暂存使您可以仔细策划提交,轻松查看、组织和完善修改。通过暂存,您可以控制提交中包含的内容。要暂存更改,请使用git add
命令,这相当于声明“我想要这些更改成为我下一次提交的一部分”。
现在让我们一个一个地探索这10个Git命令。
让我们开始吧
1. 添加和提交文件
通常,在Git中,我们使用git add *
命令暂存所有已修改的文件以进行后续提交。 之后,我们使用git commit -m "commitMessage"
命令提交这些更改。 然而,存在一种更流畅的命令,可以在一次高效的操作中完成这两项任务:
git commit -am "commitMessage"
-am
标志不仅允许我们暂存这些更改,还允许我们在一次高效的操作中提交它们。
2. 创建和切换Git分支
与前一种情况类似,还有另一个命令可以合并两个命令的功能。 与使用两个单独的命令git branch branchName
创建分支,然后git checkout branchName
切换到该分支不同,您可以使用以下命令在一次操作中完成这两个任务:
git checkout -b branchName
与git checkout
命令一起使用的-b
标志不仅可以为我们创建一个新分支,还可以立即切换到该分支。
3. 删除Git分支
要在Git中删除分支,可以使用git branch -d
或git 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. 取消暂存特定文件
有时,您可能需要从暂存区域中删除特定文件,以便在提交之前进行其他修改。 使用:
git reset filename
这将取消暂存该文件,同时保留您的更改。
6. 丢弃对特定文件的更改
如果要完全丢弃对特定文件的更改并将其恢复到最后提交的状态,请使用:
git checkout -- filename
此命令确保文件返回到以前的状态,撤消任何最近的修改。 这是一种在不影响其他更改的情况下对特定文件重新开始的有用方法。
7. 更新最后一个Git提交
想象一下,您刚在Git存储库中进行了一次提交,但随后意识到忘记在该提交中包含一项更改,或者您可能想修复提交消息本身。 您不想为这个小变化创建一个全新的提交。 相反,您想将它添加到前一个提交中。 这就是您可以使用以下命令的地方:
git commit --amend -m 'message'
此命令修改您最近进行的提交。 它将任何暂存的更改(您使用git add
添加的更改)与您的新注释组合以创建更新的提交。
需要记住的一点是,如果您已经将提交推送到远程存储库,则需要使用 git push --force
强制推送更改以更新远程分支。 因为标准的 git push
操作会向远程存储库追加一个新提交,而不是修改最后一次提交。
继续文章翻译:
8. 存藏更改
想象一下,您正在A和B两个不同的分支上工作。 在为分支A做更改时,您的团队要求您在分支B上修复错误。 当您尝试使用 git checkout B
切换到分支B时,Git会阻止它,并显示一个错误:
无法更改分支
我们可以按错误消息的建议提交更改。 但是提交更像是时间的固定点,而不是正在进行的工作。 这就是我们可以应用错误消息的第二个建议并使用stash功能的地方。 我们可以使用此命令暂存更改:
git stash
git stash
会暂时保存那些您还没有准备好提交的更改,这样您就可以在不提交未完成工作的情况下切换分支或处理其他任务。
要在我们的分支中重新应用暂存的更改,可以使用 git stash apply
或 git stash pop
。 这两个命令都会恢复最新的暂存更改。 应用暂存只是恢复更改,而弹出会恢复更改并从暂存中删除它们。 您可以在此处阅读有关暂存的更多信息。
9. 反转Git提交
想象一下,您正在使用Git项目,并且发现某个特定的提交引入了一些不需要的更改。 您需要在不从历史记录中删除该提交的情况下反转这些更改。 您可以使用以下命令撤消该特定提交:
git revert commitHash
它是一种安全且无破坏地更正项目中的错误或不需要的更改的方法。
例如,假设您有一系列提交:
- 提交A
- 提交B(在此引入不需要的更改)
- 提交C
- 提交D
要反转提交B的影响,您需要运行:
git revert commitHashOfB
Git将创建一个新提交,我们称之为提交E,它将抵消提交B引入的更改。 提交E成为您分支中的最新提交,项目现在反映的状态就像提交B从未发生过一样。
如果您想知道如何检索提交哈希,使用git reflog
很简单。 在下面的截图中,突出显示的部分表示您可以轻松复制的提交哈希:
提交哈希值
10. 重置Git提交
假设您已经对项目进行了一次提交。 但是,在检查后,您意识到需要调整或完全撤消最后一次提交。 对于这种情况,Git提供了这些强大的命令:
软重置
git reset --soft HEAD^
当您使用 git reset --soft HEAD^
时,您正在执行软重置。 此命令允许您在保留暂存区域中的所有更改的同时,回退上一次提交。 简单地说,您可以在保留代码更改的同时轻松取消提交,使用此命令。 当您需要修改最后一次提交时很方便,可能是为了在再次提交之前添加更多更改。
混合重置
git reset --mixed HEAD^
当您在不指定 --soft
或 --hard
的情况下使用 git reset HEAD^
时,这是默认行为。 它会取消最后一次提交并从暂存区域中删除更改。 但是,它会在工作目录中保留这些更改。 当您想要取消最后一次提交并从头开始更改,同时在重新提交之前保留工作目录中的更改时,这很有用。
硬重置
git reset --hard HEAD^
现在,让我们谈谈 git reset --hard HEAD^
。 它会完全擦除最后一次提交以及从Git历史记录中删除所有相关的更改。 当您使用 --hard
标志时,就没有回头路了。 因此,当您要永久丢弃最后一次提交及所有更改时,请谨慎使用它。
感谢您的阅读。 我希望这篇文章对您有所帮助,并且您学会了一些新命令。 如果您有任何其他问题,请随时联系。 欢迎分享您在日常工作中倾向于使用并发现非常方便的任何Git命令。😃