Git的配置
在完成Git的下载安装后,在任意位置右键选择Git Bash Here,打开命令行窗口
在Git使用,进行一个一次性的配置,方便Git知道是谁修改了项目,进行跟进,设置对应的用户名和邮箱地址。
git config --global user.name "your_username"
git config --global user.email your_email@domain.com
git config --list 查看所有配置
注意git config命令的 --global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
理解Git文件的三种状态与工作模式
使用Git操作文件时,文件的状态有以下三种:
状态 | 描述 |
---|---|
已提交(committed) | 已提交表示数据已经安全的保存在本地数据库中。 |
已修改(modified) | 已修改表示修改了文件,但还没保存到数据库中。 |
已暂存(staged) | 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。 |
针对Git文件的三种状态,这里需要了解Git项目的三个工作区域:工作区、暂存区和Git仓库。
分类 | 描述 |
---|---|
工作区 | 简单的理解为在电脑里能看到的目录,比如自己创建的本地项目目录 |
暂存区 | Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git自动创建的第一个分支master,以及指向master的一个指针叫HEAD。 |
Git仓库 | 工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。 |
基本的Git工作流程描述如下:
- 在工作区修改某些文件。
- 对修改后的文件进行快照,然后添加到暂存区。
- 提交更新,将保存在暂存区域的文件快照永久转储到Git仓库中。
创建版本库并提交文件
版本库又名仓库,可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
编写一个文本文件并将文件提交到Git仓库
- 初始化Git本地仓库
通过执行git init命令在本地初始化一个本地仓库,执行该命令后会在本地初始化一个没有任何文件的空仓库。
在本地创建一个文件用作Git的本地仓库,Git Bash Here打开命令行窗口
-
新建文本文件git01.txt并添加到暂存区
在.git同级目录下添加git01.txt文件后,使用 git status查看工作目录与暂存区文件状态
git status命令用于显示工作目录和暂存区的状态。使用此命令能看到哪些被暂存到了,哪些没有,哪些文件没有被Git tracked到。
执行 git add命令添加文件到暂存区
git add path通常是通过git add <path>的形式把<path>添加到索引库中,<path>可以是文件也可以是目录。
git不仅能判断出<path>中,修改(不包括已删除)的文件,还能判断出新添的文件,并把它们的信息添加到索引库中。
git commit -m '单引号里写提交的注释' 提交文件
git log 查看提交的日志信息
修改文件再次进行提交
修改后再次查看状态
git add . 这里的“.”是表示提交当前路径下的文件,也可以写绝对路径。
注意:提交前必须要先添加到暂存区
将本地的文件修改,但未提交。
git diff HEAD --git01.txt
新建git02,将其提交到缓存区
将git02将其从暂存区移除
git restore --staged git02.txt
git reset HEAD git02.txt
该命令是撤销对该文件的上一步操作
版本回退
当文件修改后被提交的次数很多时,对于版本库中存放的文件就会出现不同的版本,在多人开发的项目环境中,通常会对不同版本文件进行查看甚至回退的情况(比如某些游戏中所提供的状态保存功能,能够在某一时刻保存整个游戏场景状态以方便后续继续在该状态下进行游戏,而不是从头开始),值得庆幸的是Git也提供了同样的功能,能够让开发者在不同版本的项目中进行切换,达到时空穿梭自如的目的。
我们可以通过git log命令来查看对应的文件已经有几个版本。
如果提交历史记录较多,可以加入数字控制显示的版本记录数 并且使用 --pretty=oneline简化输出。
HEAD -> master指向最后一次提交
回退到上一个版本的命令:git rest --hard HEAD^
其中“^”的个数代表回退版本的个数
也可以指定回退多少个版本git rest --hard HEAD~2
在~后的数字即是回退的版本个数
git reflog查看所有的日志
将其回退到指定的版本git reset --hard bafb77b(版本号唯一标识,可在日志中查看)
文件删除
在Git中,删除文件同样是一个修改操作,即在Git世界中,Git仅仅关注文件是否被修改(文件添加,更新,删除)
git ls-files查看git仓库的文件
我们将git02.txt提交
我们将本地的git02.txt删除
从git仓库中把git02.txt恢复
git checkout git02.txt
如何将文件从git仓库中删除呢?
因为Git把文件从工作区删除也看做是一种修改,所以只需要在工作区将其删除,然后进行一次提交即可。
我们可以根据提示,使用 git add 或 git rm进行删除操作
如果使用git rm操作,可以自动将本地工作区的文件也删除,更加方便。
如果发现是误删,也可以使用之前的版本回退进行恢复。
远程仓库(GitHub)
Git是一个分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上。对于Git,除了前面提到的本地版本库外,Git支持远程仓库的托管服务即使用者可以将本地版本库中的文件托管到远程服务器进行存储,这样就极大的方便开发,无论你走到哪,只要你的机器能够联网,就可以通过远程的仓库地址得到一份相同的项目库文件,并且下载到本地的文本版本记录与远程文件版本保持一致,并且可以很方便的实现多人协同开发操作。
通过SSH下载GitHub的文件
首先要生成一个SSH的key
使用本地Git客户端生成SSH公钥与私钥 执行命令:
ssh-keygen -t rsa -C "GitHub账户邮箱"
输入后连续回车,之后去提示的目录下找SSH公钥与私钥
打开下面的那个.pub文件,将其中内容拷贝
点击add a new public key
将内容复制进去
注意这里添加时将光标所在位置的空格删去
进行添加
添加完成后进行测试
ssh -T git@github.com
输入yes
得到认证成功的提示
使用git clone 加SSH通道地址进行下载
远程仓库推送
首先要在GitHub创建一个仓库,并做相应的配置
Add a ReadMe File是添加一个以Markdown形式描述该项目的md文档
将项目的SSH通道地址复制下来,这一步是绑定远程仓库
git remote add origin git@github.com:Caitlyn-bot/PersonalPractice.git
git push -u origin master
将项目从main切换至master
推送完成后,在本地修改文件
先提交到本地仓库,然后git push 推送到远程仓库
成功推送至远程仓库
Git分支操作
开发企业项目中在使用Git或者其他类似版本控制软件对项目版本进行管理时,多人合作的项目在开发时通常不会直接在主干master上进行操作,而是重新开辟新的分支,在新的分支上进行开发调试等操作,当项目调试通过时才会将分支项目的代码合并到主干中,这是实战中比较好的一种策略,特别是多人协同开发一个项目的情况下尤其明显。Git对于分支操作提供了一下基本命令:
命令 | 描述 |
---|---|
git checkout branch | 切换到指定分支 |
git checkout -b new_branch | 新建分支并切换到新建分支 |
git branch -d branch | 删除指定分支 |
git branch | 查看所有分支,并且*号标记当前所在分支 |
git merge branch | 合并分支 |
git branch -m /-M oldbranch newbranch | 重命名分支,如果newbranch名字分支已经存在,则需要使用-M强制重命名,否则,使用-m进行重命名 |
注:合并分支时,一定要在主干上合并分支,而不要在分支上合并主干
本地分支操作
新建git02.txt
我们此时在dev分支下操作
切回主干,master分支并未受到dev分支的影响
此时master分支对应的工作区并没有git01.txt
在主分支master上将dev分支合并到主分支上
删除该分支
远程分支操作
相关操作命令
命令 | 描述 |
---|---|
git branch -a | 查看本地与远程分支 |
git push origin branch_name | 推送本地分支到远程 |
git push origin :remote_branch | 删除远程分支(本地分支还在保留) |
git checkout -b local_branch origin/remote_branch | 拉取远程指定分支并在本地创建分支 |
查看本地和远程分支,其中红色部分为远程仓库
创建一个本地分支dev
再次修改本地文件
将其推送到远程的dev分支
推送成功
删除dev远程分支
删除成功
在远程仓库新建分支
git fetch 获取远程仓库最新的分支状态
远程拉取并在本地创建分支
分支操作冲突出现与解决
开发中对不同分支下同一文件进行修改后执行合并时就会出现文件修改冲突情况。
如这是dev分支下的git01.txt
修改后进行提交
切换至master主干
修改完成后进行提交
进行合并,提示我两个版本不一致,无法合并,在命令后多加--allow-unrelated-histories
手动进行处理然后再次提交
使用git log --graph --pretty=oneline命令查看带图的日志
当出现冲突时在左边的*号会有分叉
多人协同操作冲突
当多个用户同时操作同一分支同一文件时产生的冲突。当第二个人进行提交时会被阻止提交,必须先从远程仓库拉取,拉取时自动合并再次出现合并冲突,解决方法同上。
注:出现冲突的情况一定是同一个分支,同一个文件的同一行,但代码(内容)不同
多人冲突潜规则:谁发现冲突,谁负责解决。
通过先拉取在提交来避免冲突的出现。
标签管理
标签操作基本命令 git tag
命令 | 描述 |
---|---|
git tag tag_name | 新建标签默认为HEAD |
git tag -a tag_name -m 'xxx' | 添加标签并指定标签描述信息 |
git tag | 查看所有标签 |
git tag -d tag_name | 删除一个本地标签 |
git push origin tag_name | 推送本地标签到远程 |
git push origin --tags | 推送全部未推送过的本地标签到远程 |
git push origin :refs/tags/tag_name | 删除一个远程标签 |
同大多数VCS一样,Git也可以对某一时间点上的版本打上标签。开发中在某个软件版本(比如v1.0等等)的时候,通常使用版本库软件命令来对某一版本打上一个标签,以方便标识。
添加标签
给指定版本打标签
推送标签到远程仓库
推送所有未推送的标签
Idea集成Git
打开idea的设置页面,搜索Git,进行配置对GitHub也进行配置
idea提交项目
将项目托管给本地的Git仓库
此时全部文件都变成红色
意为都是未提交至暂存区,右键项目
添加到暂存区后提交至本地仓库
选择要提交的部分,添加好注释,进行提交
等待成功提交至本地仓库,去GitHub创建远程仓库
复制仓库地址,进行绑定远程仓库
进行push操作