目录
又到了一周一次的选题大赛了,看到群里的大佬们不遗余力、倾巢而出地出题、写题、做题,这股子冲劲儿一直刺激着我。这一次选择了小雨的《Git入门指南》,下面开始吧。~
Git是一个分布式版本控制系统(Distributed Version Control System,简称DVCS),用于跟踪和管理代码变更。它最初由Linux开发者Linus Torvalds用C语言编写而成,主要用于Linux内核的开发,但现已成为最流行的版本控制系统之一。这里需要了解为什么大家开始越来越喜欢Git,而慢慢抛弃了像SVN、CVS等代码控制工具。
可以从Git官网(https://git-scm.com/)下载对应操作系统的版本,目前的最新版本为Git-Release v2.46.0
,最后的更新日期为2024-07-29。
git
命令查看是否安装成功,我习惯性的使用 git -v
这个命令。sudo apt-get install git
命令安装。yum
或者rpm
来安装。git
以及界面工具 git-gui
。~ $ brew list | grep git
git
git-gui
~ $
安装Git后,需要配置用户信息,以便在提交代码时能够识别提交者。配置用户信息可以使用以下命令:
~ $ git config --global user.name "Your Name"
~ $ git config --global user.email "your.email@example.com"
这里的--global
参数表示全局配置,适用于当前用户下的所有Git仓库。如果需要为某个特定仓库设置不同的用户信息,可以去掉--global
参数,并在该仓库目录下执行上述命令。
Git的工作流程主要围绕工作区、暂存区和仓库三个区域展开:
工作区(Workspace):写代码的地方,新增、修改或删除的文件都会反映在这里。
暂存区(Stage/Index):暂存区是一个临时存放修改的区域,通过git add
命令将工作区的修改添加到暂存区。
仓库(Repository):仓库是Git管理代码的地方,所有提交的历史记录都保存在这里。通过git commit
命令将暂存区的修改提交到仓库中。
【查看仓库状态】
git status
这个命令会显示当前仓库的状态,包括哪些文件被修改了但还没有提交等。
~ $ git status
【添加文件到暂存区】
将指定文件添加到暂存区,或者使用git add .
添加当前目录下的所有文件。
~ $ git add <file>
【提交文件到仓库】
将暂存区的修改提交到仓库中,并附上提交信息。
~ $ git commit -m "提交信息"
【查看提交历史】
查看当前仓库的提交历史记录。
~ $ git log
【回退版本】
将仓库回退到指定的提交版本。
~ $ git reset --hard <commit_id>
【克隆远程仓库】
将远程仓库克隆到本地,或者说将远程仓库克隆(拷贝)一份到本地。
~ $ git clone <repository-url>
【推送(PUSH)到远程仓库】
将本地仓库的修改推送到远程仓库。
~ $ git push <remote-name> <branch-name>
【拉取(Pull)远程仓库的更新】
将远程仓库的更新拉取到本地仓库,并自动合并。
~ $ git pull <remote-name> <branch-name>
Git 的分支管理功能非常强大,通过合理使用分支,可以极大地提高开发效率和团队协作的灵活性。分支允许开发者在不影响主代码库(通常是 master 或 main 分支)的情况下,进行新功能的开发、错误修复或实验性更改。例如腾讯云一个开源项目的分支:
一个分支相当于一条时间线,每一次commit都会形成一个版本,一个个版本依次存储在分支的一个个提交点上,分支上有个指针默认指向最新的提交点。
分支一般的操作如下:
## 查看本地分支
~ $ git branch
## 查看远程分支
~ $ git branch -r
## 查看所有分支(包括本地和远程)
~ $ git branch -a
## 创建一个新的本地分支并切换到该分支
~ $ git checkout -b <branch-name>
~ $ git switch -c <branch-name>
## 仅创建新的本地分支但不切换
~ $ git branch <branch-name>
## 创建并推送新的远程分支(同时创建本地分支并切换到该分支)
~ $ git checkout -b <branch-name> origin/<branch-name>
~ $ git switch -c <branch-name> --track origin/<branch-name>
切换到已存在的本地分支
~ $ git checkout <branch-name>
~ $ git switch <branch-name>
将一个分支合并到当前分支
~ $ git merge <branch-name>
解决合并冲突后,使用 git add <file>
来标记冲突已解决,然后使用 git commit
完成合并提交。
删除本地分支(除非不用,建议做好备份)
## 删除已合并分支
~ $ git branch -d <branch-name>
## 强制删除未合并的分支
~ $ git branch -D <branch-name>
## 删除远程分支
~ $ git push origin --delete <branch-name>
~ $ git push origin :<branch-name>(
推送本地分支到远程仓库(并创建同名远程分支):git push origin <branch-name>
如果远程分支已存在,并且你想将本地分支的更改推送到远程分支,同样使用上面的命令。
## 创建一个新的本地分支并跟踪远程分支
~ $ git checkout -b <local-branch-name> origin/<remote-branch-name>
~ $ git switch -c <local-branch-name> --track origin/<remote-branch-name>
## 拉取远程分支的最新更改到本地已存在的跟踪分支
~ $ git pull
如果你已经有一个本地分支,并且想要更新它以匹配远程分支的最新状态,可以执行下面的命令:
## 1、先切换到该分支
~ $ git checkout <branch-name> 或 git switch <branch-name>
## 2、然后拉取远程分支的更改
~ $ git pull
重命名本地分支
~ $ git branch -m <old-branch-name> <new-branch-name>
如果分支已被推送到远程仓库,并且你也想更新远程分支的名称,你需要先重命名本地分支,然后删除远程分支,并推送新的分支名:
~ $ git branch -m <old-branch-name> <new-branch-name>
~ $ git push origin :<old-branch-name>
~ $ git push origin <new-branch-name>
Git 标签(Tags)是 Git 版本控制系统中用于给特定的提交(commit)打上标记的一种方式。这些标记可以是版本号(如 v1.0, v2.0 等),或者是任何你选择的描述性名称。标签通常用于标记重要的发布点(比如软件发布版本),因为它们允许你轻松地回退到项目的历史中的某个特定点。例如腾讯云某开源项目标签:
要创建一个新的标签,你可以使用 git tag
命令后跟标签名和可选的提交哈希(默认为当前分支的最新提交)。
【创建一个默认类型标签】
在当前分支的最新提交上创建一个名为 v1.0 的轻量级(默认类型)标签。
~ $ git tag v1.8.3
【创建一个带有消息/签名的标签】
~ $ git tag -a v1.8.3 -m "Release version 1.0"
【创建一个带 GPG 签名的标签】
~ $ git tag -s v1.8.3 -m "Signed release version 1.0"
【查看标签】
默认情况下,如果想要查看所有的标签,可以使用git tag
命令,如果需要特定版本的标签,则可以使用 git show [tagName]
查看。
【推送标签】
默认情况下,当你执行 git push
命令时,Git 并不会自动推送你的标签到远程仓库。要推送你的标签,你可以使用以下命令:
~ $ git push origin v1.8.3
~ $ git push origin --tags
在真实实践过程中,一般不建议删除标签(版本),资源允许的情况下,可以新开标签来保存原有的标签。不过针对一些特性的需求,还是要了解清晰。按照清理的步骤:
## 先删除本地标签
~ $ git tag -d v1.8.3
## 然后推送更新到远程仓库
~ $ git push origin :refs/tags/v1.8.3
## 在2.0+中也可以使用下面的命令
~ $ git push origin --delete v1.8.3
在Git中,合并(merge)冲突是常见的问题,通常发生在两个或多个分支对同一文件的同一部分进行了不同的修改。解决Git合并冲突需要一定的步骤和技巧,无论如何,尽量不要覆盖掉别人的代码或者别人的代码覆盖掉自己的代码。
如果不熟悉的情况下,可以先手动解决一些冲突;熟悉命令后使用命令会事半功倍;也可以使用Git GUI、SourceTree、Beyond Compare、KDiff3等图形化工具提供了直观的界面来帮助用户解决合并冲突。
尽量在开发过程中避免冲突,但是遇到冲突也别着急忙慌的。下面一些建议可以避免冲突:
深入Git有很多方式和方法,这里推荐三种,官方网站、书籍、在线课程。
Git的官方网站(https://git-scm.com/)提供了详细的文档和教程,是学习Git的首选资源。当然了,如果能看懂英文是最好的,毕竟英文才是获取知识的最快捷的途径。这虽然是一种静态学习方法,但是学习的知识牢固。
同官网一样,看书也是一种静态学习方法,巩固知识是一个不错的选择。关于Git相关的书籍有很多种类,这里推荐一些博主阅读到的书籍,首推便是官方指定书籍——《Pro Git》,深入学习Git的经典之作。
《Git权威指南》是Git领域的集大成之作,是一本关于Git的百科全书,在广度、深度和实战性上让同类作品望尘莫及。作者是国内顶尖的版本控制专家和咨询顾问之一,本书得到了Git官方维护者Junio C Hamano和ITeye创始人范凯(Robbin)先生等数位专家的高度认可和极力推荐,权威性毋庸置疑。
本书最好的是可以让你知道内部的理念、行为和最佳实践。全书共分为12章,从基础知识讲起,陆续介绍了项目历史管理、使用Git进行程序开发、工作区管理、Git协作开发、分支应用进阶、集成变更、历史记录管理、子项目管理、Git的定制和扩展、Git日常管理、Git最佳实践。
其他书籍像《Git从入门到精通》、《版本控制之道》、《Git分支管理策略》、《深入理解Git》可以酌情看看了解下。
在线课程可以快速汲取营养,吸取知识,各大在线教育平台(如Coursera、慕课网、B站等)提供了丰富的Git课程,适合不同层次的学习者。
推荐一个学习地址,感觉不错,至少可以应对工作中的任何操作:https://cloud.tencent.com/developer/doc/1096
通过以上简单指南,是否可以让你对Git有更深入的了解,开始Git的学习之旅,并在实际的项目开发中逐步掌握Git的使用技巧,加油吧。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。