进阶 Git 教程

通过远程存储库部署您的项目可以让您灵活地管理它的每一部分。错误修复、功能更新、文件删除、团队合作、开源贡献、代码部署等现在都触手可及,只要掌握了丰富的 Git 知识。

所以,您一直在使用 Git 但想了解更多?这里有一些更高级的 Git 技巧,它们将使您的项目版本控制变得轻而易举。

Git 分支

Git 分支阻止您直接推送到主分支。如果您与一组开发人员一起管理项目,这会很有帮助。您可以根据需要创建任意数量的 Git 分支,然后稍后将它们合并到 master 分支。

创建一个 Git 分支

要创建 Git 分支,请使用:

 git branch branch_name

切换到 Git 分支

使用checkout切换到 Git 分支:

 git checkout branch_name

切换到分支后,您可以使用git add –all 暂存您的更改。然后使用git commit -m "commit name"命令提交它们。

比较分支与主

使用git diff命令:

 git diff master..branch_name

要比较特定文件:

 git diff master..testb -- main.html

比较两个分支类似于将分支与主分支进行比较的方式:

 git diff branch1..branch2

要查看两个分支之间特定文件的差异:

 git diff branch1..branch2 -- main.html

将更改推送到远程分支

您可能希望其他开发人员查看您对本地分支中的文件所做的更改,然后再将其推送到现场。一个好的做法是将本地 Git 分支推送到远程副本,以便他们查看。

假设您之前已经创建了一个名为changes的本地分支。您可以切换到该本地分支,调整您想要的所有文件,然后将它们暂存并提交到该分支。

然后,您可以将这些更改推送到分支的远程版本:

 git push origin changes

使用拉取请求将远程分支与 Master 合并

所以另一个程序员已经审计了远程分支中的更改changes )。但是您想将它与主分支合并并实时推送。

请记住,您的远程分支继承了您本地 Git 分支的名称( changes )。以下是合并更改的方法:

切换到主分支:

 git checkout master

拉取分支的 origin 或 HEAD ( changes ) 以将其与 master 分支合并:

 git pull origin changes

将此合并实时推送到主分支:

 git push origin master

改用 Git 合并

使用merge命令将分支与 master合并

迁移到 master 分支:

 git checkout master

将它与分支合并(更改):

 git merge changes

然后将合并实时推送到主分支:

 git push origin master

确保使用分支名称替换更改

合并成功后,您可以在本地和远程删除分支(如果您不再需要它):

相关:如何在 Git 中重命名分支

Git变基

如果您有过时提交多个分支,你可以变基或重新聚焦头/这些分支的裁判继承为一个更新的头/裁判

因此,当您需要使用当前分支的基础更新某些分支时,重新定位会派上用场。

但是,重新定位不应该是频繁的操作,尤其是当您与团队合作时,因为它可能会破坏整个工作流程。但是,如果您独自工作并且熟悉您的工作流程和分支,那么如果您知道在哪里以及如何使用它,则变基不应该造成严重破坏。

例如,假设您有两个分支;分支 1 和分支 2。现在,您已经有一段时间没有对 branch1 进行任何更改了。但是您始终将更改提交到 branch2,包括最近。

因此,您决定将 branch1 与流一起携带。因此,将 branch1 重设到 branch2 意味着您告诉 branch1 忽略其先前的提交并继承最近对 branch2 所做的提交。

您可以这样做:

切换到废弃分支(branch1):

 git checkout branch1

然后将 branch1 变基到更新后的 branch2:

 git rebase branch2

吉特壁球

Git squash 允许您将多个提交合并为一个。当您在一次更新中多次运行git commit时,它会有所帮助。一个实际的例子是当每个错误修复或单个功能的代码重构都有一个单独的提交时。

但是您可能不想将 HEAD 提交与随附的提交一起推送,因为它们都有相同的目的。推荐的方法是将它们压缩成一个,以避免在跟踪提交时混淆。

压缩提交的最佳方法是通过交互式 rebase 模式。请看下面的示例以更好地理解这一点。

在此示例中,假设您修复了五个错误。他们每个人都有一个承诺。以下是将这五个提交合并为一个的方法:

运行git reflog查看提交的哈希码:

 git reflog

在这种情况下,结果如下:

现在您的目标是压缩最后五个提交,从first fix第五个 fix

为此,请复制位于第一个修复程序( 0a83962 ) 下方的提交的哈希代码。然后按Q退出reflog

现在在该哈希上运行git rebase –interactive

 git rebase --interactive 0a83962

Git 然后打开一个交互式 rebase 文件,如下所示:

要压缩提交,不包括第一个 fix ,请将其他每个提交的pick替换为s

保存并关闭此文件。

然后打开另一个文件以重命名压缩的提交:

清理这些并为压缩的提交输入一个首选名称:

保存那个文件。然后关闭它,您应该在终端中收到一条成功消息。

注意:交互式文件可能会在终端内打开。但是,如果您使用的是 Windows,您可能希望强制您的终端将文件全局打开到您最喜欢的文本编辑器,以使压缩变得容易。

为此,请打开命令行并运行:

 git config --global core.editor "'path to choice text editor' -n -w"

Git Fork 与 Git Clone

分叉和克隆是 Git 中的两个不同术语。你不能分叉你的存储库,因为它已经在你身边了。但是,您可以分叉其他人的存储库并在之后克隆它。

分叉存储库意味着您正在获取某人存储库的副本并将其归为您的。获得该存储库的副本后,您可以像克隆任何 git 存储库以进行本地更改一样克隆它。

以下是在 GitHub 上克隆远程存储库并启动下载到本地目录的方法:

 git clone https://github.com/username/repository_name.git/

将文件恢复到其默认状态

如果要在上次提交后清除文件中的更改,可以使用git restore命令:

 git restore filename

修改提交

如果您在暂存某些文件时忘记对它们进行更改,您可以退回到之前的提交。

更改您忘记的文件。然后使用git amend查看提交:

 git add file_forgotten
git commit --amend

取消暂存文件

您可以使用git rm命令删除为提交而暂存的特定文件:

 git rm --cached filename

您还可以一次删除多个文件:

 git rm --cached file1 file2 file3 file4

请记住将相关文件扩展名附加到您要豁免的任何文件。例如,纯文本文件应该是filename.txt

相关:如何清理 Git 并删除未跟踪的文件

Git重置

如果您想一次性删除为提交而暂存的所有文件,则使用git reset会很有帮助:

 git reset

但是,Git reset HEAD 将分支的 HEAD 指向工作树中的特定提交。例如,如果您还没有推送当前提交,您可以回退到最近推送的提交:

 git reset --soft HEAD~1

如果您已经推送了当前提交,请将–soft替换为–hard

 git reset --hard HEAD~1

Git 还原

reset命令不同, git revert维护提交历史的完整性。如果由于错误或错误而想修改提交,这很方便。

它不会放弃目标提交或进行新的提交。相反,它会恢复到您最近所做的更改,而不会删除或重命名此类提交。这是保持提交清洁的好方法,而且比一直重置更安全。

要恢复到提交:

 git revert HEAD~1

HEAD~1指向工作树中的特定提交。

删除跟踪文件或目录

您可以使用git rm -f删除工作树中的任何跟踪文件。但是请注意,Git 无法删除未跟踪的文件,因为它不会缓存它们。

要删除暂存文件:

 git rm -f filename

要删除暂存文件夹:

 git rm -r -f foldername

Git 日志记录

在 Git 中查看提交日志和历史记录:

 git log

要记录特定分支中的活动:

 git log branch_name

相关:如何使用 git log 检查项目的历史记录

有时您可能想要恢复到一个废弃的提交。所以要查看放弃的提交,包括相关的提交:

 git reflog

查看特定分支的引用日志:

 git reflog branch_name

使用 Git 像专业人士一样管理您的项目版本

借助 Git 提供的许多优势,您可以远程管理项目发布,而无需窃取主分支中的本地文件和文件夹。此外,它还可以让您轻松地与团队一起运行项目。

如您所见,Git 具有许多您可以探索的功能。但是要小心有目的地使用这些功能。否则,您最终可能会破坏事物。也就是说,您仍然可以启动演示远程存储库并使用这些功能。