Git基础
Git的由来
Git是由Linus Torvalds创建的一个分布式版本控制系统,最初是为管理Linux内核开发而创建。当时,Linux内核使用BitKeeper作为版本控制工具,但是BitKeeper提出了新的许可协议,在社区中引起了争议,这导致了Linus Torvalds的不满和反感。
因此,Linus决定创建自己的版本控制工具,他决定创建一个简单、高效、分布式的工具。他决定以自己的名字来命名它,最终成为了Git。
Git于2005年发布,并且迅速获得了广泛的认可和使用。现在,Git已经成为了全球范围内的一个重要的版本控制系统,被广泛应用于个人和企业软件开发中。
版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。它通常被用于跟踪软件开发中的源代码变化,但它也可以用于其他类型的文件,如文本文件、配置文件等。版本控制系统可以让多个人协同工作,同时对同一个文件进行编辑,并且可以方便地回滚到之前的版本,以避免误操作等问题。其中最常用的版本控制系统之一是 Git。
Git灵魂5问?
-
什么是Git? 它具有哪些特性?
Git是源代码管理工具,用于追踪代码的修改和版本控制。 Git的特性包括:速度快、可分布式、支持非线性开发、保留历史记录并允许回退、支持多个并行开发分支等。 -
Git中什么是HEAD?
HEAD是指向当前本地分支中最新提交的指针。它是指向当前检出的分支的别名,并且是Git中的重要标记。在使用reset和checkout命令等操作时常常需要用到HEAD。 -
如何创建分支,并将分支与主分支合并?
要在Git中创建分支,可以使用git branch命令并指定新分支的名称,例如:$ git branch mynewbranch
。然后,可以使用Git checkout命令将工作目录切换到新分支,例如:$ git checkout mynewbranch
。要将分支与主分支合并,可以使用git merge命令,并指定要合并的分支名称,例如:$ git merge mynewbranch
。 -
如何撤销上一次提交?
可以使用git reset命令来撤消上一次提交,并将代码回滚到上一个提交的状态。例如:$ git reset HEAD~1
。HEAD~1表示回滚到上一个提交,如果要回滚到更早的提交可以将数字1替换为所需提交的数量。 -
Git中如何解决代码合并冲突?
当合并分支时,如果两个分支都修改了同一行代码,则会发生代码合并冲突。Git会在合并时提示冲突,此时需要手动修改代码并解决冲突。可以使用git mergetool命令调用合并工具来解决冲突,或者使用编辑器进行手动编辑。编辑完成后,可以使用git add命令将修改后的文件添加到暂存区,然后使用git commit命令提交修改并完成合并。
基础知识
Git本地有三个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)。如果在加上远程的git仓库(Remote Directory)就可以分为四个工作区域。文件在这四个区域之间的转换关系如下:
-
Workspace:工作区,就是你平时存放项目代码的地方
-
Index / Stage:暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息
-
Repository:仓库区(或本地仓库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本
-
Remote:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换
在使用Git进行版本控制时,每个文件都处于三个阶段中的一个:
- 已修改:表示已经对文件进行了修改,但还没有提交到版本库中;
- 已暂存:表示已经使用
git add
命令将修改的内容提交到暂存区; - 已提交:表示已经使用
git commit
命令将修改的内容提交到本地Git仓库。
-
Git的基本操作
命令 解释 git init 初始化一个新的Git仓库 git add 将文件添加到暂存区 git commit -m “commit message” 将暂存区的内容提交到本地Git仓库 git status 查看Git仓库的状态 git log 查看文件的修改历史 git checkout 撤销已修改但未提交的内容 git reset --hard <commit -id> 撤销已提交的内容 git config -l 查看配置 git config --global --list 查看当前用户信息 git clone 克隆一个项目和它的整个代码历史(版本信息) git push 将本地分支推送到远程分支 git fetch 将远程分支的最新代码拉取到本地,但是并不会自动合并到本地分支 -
Git分支管理
分支是Git最重要的功能之一,它可以让开发者在不影响主分支的情况下,安全地进行新功能的开发和测试。常用的分支操作包括:
命令 | 解释 |
---|---|
git branch | 创建新分支 |
git checkout | 切换分支 |
git merge | 合并分支 |
git branch -d | 删除分支 |
git branch | 列出本地分支 |
Git可以通过远程仓库实现不同开发者之间的协作,以及备份和恢复等功能。常用的远程操作包括:
-
将本地仓库连接到远程仓库:
git remote add origin <remote-url>
。 -
从远程仓库拉取代码:
git pull
。 -
将本地代码推送到远程仓库:
git push
。 -
查看远程分支:
git branch -r
。
Git可以通过在项目根目录下创建.gitignore
文件来忽略一些文件或文件夹。在.gitignore
文件中指定的文件或文件夹将不会被Git跟踪,也不会出现在版本控制系统中。
.gitignore
文件的语法如下:
# 这是注释
*.txt # 忽略所有txt文件
/foo # 忽略根目录下的foo文件夹
bar/ # 忽略根目录下所有名为bar的文件或文件夹
!/bar/baz.txt # 但是保留bar/baz.txt这个文件
在.gitignore
文件中,你可以使用通配符、斜杠(/)和感叹号(!)等符号来指定要忽略或保留的文件和目录。例如,通配符*.txt
表示忽略所有扩展名为.txt
的文件。斜杠/
表示目录分隔符。感叹号!
表示取消忽略。
需要注意的是,.gitignore
文件只对尚未被Git跟踪的文件或目录生效,如果一个文件或目录已经被Git跟踪了,.gitignore
文件对它们就不再生效。如果你想取消跟踪已经被Git跟踪的文件,需要使用git rm --cached
命令,同时在.gitignore
文件中添加对应项。
Git 分支是为了在软件开发中更好地进行代码管理而设计的一种功能。分支实际上是指向提交对象(commits)的可变指针。 在大多数软件开发工具中,分支是不同于主目录的开发专用的相对独立区域。
Git 中的分支类似于一个指向当前提交对象(commit)的指针。Git 中的默认分支名为 master,但你也可以创建自己的分支。在每个新的分支上,你可以更改代码并提交,而这些提交不会影响主分支上的代码。
分支的主要目的是让你可以在你想要试验一些新功能的同时不会对主分支产生影响。一旦新的功能测试通过,你可以将该分支与主分支合并,然后把该分支删除。
master主分支应该非常稳定,用来发布新版本,一般情况下不允许在上面工作,工作一般情况下在新建的dev分支上工作,工作完后,比如上要发布,或者说dev分支代码稳定后可以合并到主分支master上来。
如果同一个文件在合并分支时都被修改了则会引起冲突:解决的办法是我们可以修改冲突文件后重新提交!选择要保留他的代码还是你的代码!
在 Git 中,分支是极其轻量级的,创建和删除它们几乎是瞬间完成的操作。因此,在 Git 中,分支的使用被广泛认为是一种好习惯。
更多的 Git 相关知识可以参考官方文档 https://git-scm.com/doc 或者 Git 的在线文档教程 https://try.github.io/ 。