Git入门到精通

120 阅读8分钟

1、常用命令

命令作用
git config --global user.name 用户名设置用户签名
git config --global user.email 邮箱设置用户签名
git init初始化本地库
git status查看项目修改状态
git add 文件名将文件添加到暂存区
git commit -m '日志信息' 文件名将文件提交到本地仓库
git reflogs查看历史记录
git reset --hard版本穿梭

1.1设置用户签名

设置用户名为xu,邮箱为123455@qq.com

  • git config --global user.name xu
  • git config --global user.email 123455@qq.com 可以在用户目录下找到.gitconfig并查看内容

image.png

或者使用命令 cat ~/.gitconfig查看

image.png

说明: 签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的。Git 首次安装必须设置一下用户签名,否则无法提交代码。※注意:这里设置用户签名和将来登录GitHub(或其他代码托管中心)的账号没有任何关系。

1.2初始化本地库

进入到本地仓库目录下执行 git init image.png

1.3查看本地库状态

git status

image.png 告诉我们目前没有修改文件。
我手动创建一个文件a.txt,再次执行git status

image.png 这个时候提示,有个文件a.txt文件需要添加到暂存区

1.4将文件添加到暂存区

将a.txt文件添加到暂存区: git add a.txt

image.png 可以看到 文件a.txt的颜色由红色变为绿色,表示已经成功添加到暂存区。
还可以看到提示我们如果想取消添加到暂存区可以使用git rm --cached 文件名

image.png 又看到 文件a.txt的颜色由绿色变为红色,表示已经成功取消添加到暂存区。

1.4.2将所有文件添加到暂存区

如果遇到需要一次添加很多文件到暂存区,可以使用 git add .,会将所有修改或新增的文件添加到暂存区

1.5将文件提交到本地库

git commit -m '日志信息' 文件名 image.png

1.6查看日志

1.6.1查看简要日志

git reflog

image.png

30dbb5e (HEAD -> master) HEAD@{0}: commit (initial): 新增a.txt文件

30dbb5e:表示版本(完整版版本号的前七位) 新增a.txt文件: 日志内容

1.6.2查看详细日志

git log

image.png

commit 30dbb5eecc8b5d3849882607d169e6f9dd42d907 (HEAD -> master)
Author: xuzili <7343242141@qq.com>
Date:   Fri May 31 22:03:59 2024 +0800
    新增a.txt文件
  30dbb5eecc8b5d3849882607d169e6f9dd42d907:完整的版本号
    Author:作者信息

1.7版本穿梭

1.7.1修改文件并提交

修改文件a.txt,添加123456内容

image.png 再使用git status查看状态

image.png 提示文件有修改,接下来我们添加到暂存区并提交到本地库

image.png

1.7.2查看日志

git reflog image.png 现在指向最新的版本d88227b

1.7.3 版本穿梭

切换到b9e9a27版本 git reset --hard b9e9a27

image.png 回退到b9e9a27版本后,查看a.txt的文件内容,发现已经没有了123456

2、分支操作

2.1 什么是分支?

在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是一个单独的副本。(分支底层其实也是指针的引用)

image.png

2.2分支的好处

  • 同时并行推进多个功能开发,提高开发效率。
  • 各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。

2.3分支操作命令

命令作用
git branch 分支名创建分支
git branch -v查看分支
git checkout 分支名切换分支
git merge 分支名把指定的分支合并到当前分支上

2.3.1查看分支

git branch -v

image.png 星号指向的和名称绿色的表示为当前分支 当前只有一个master分支并且指向d88227b版本

2.3.2创建分支

创建hot-fix分支, git branch hot-fix

image.png

2.3.3切换分支

切换到hot-fix分支,git checkout hot-fix

image.png

2.3.3在一个分支下修改,另一个分支下查看

先切换到hot-fix下,在文件a.txt中添加修复bug内容,然后提交到本地库,然后在切换到master分支,查看a.txt内容,发现没有修复bug,再切换为hot-fix发现有修复bug

image.png

2.3.4正常合并分支

将hot-fix合并到master分支上,git merge hot-fix image.png

2.3.5撤销

git revert 命令可以用来撤销之前的提交。如果你不想重新合并,而是想要保留历史记录中的合并提交,但是想要撤销这次合并带来的变化,可以使用 git revert
先查看刚刚合并的版本号

image.png 撤销刚刚合并的版本b3f7158,git revert b3f7158

image.png

查看日志,多了一个刚刚撤销操作的日志

image.png

然后查看内容master分支下,没有了修复分支合并,但是hot-fix分支下还有。 image.png 然后再次尝试合并

image.png 发现提示已经是最新的,说明只是撤销了合并分支带来的变化,没有完全撤销这次合并

2.3.6冲突合并

(1)什么合并冲突?
当两个分支中对同一部分文件做了不同的更改,Git 不知道应该保留哪个版本,因此会标记出冲突的区域,需要用户手动解决。 (2)创建合并冲突 切换到hot-fix分支,修改a.txt文件内容

image.png 提交修改到hot-fix分支上

image.png 切换到master分支上,修改a.txt文件内容

image.png 提交修改到master分支上

image.png 现在开始执行git merge hot-fix 合并hot-fix分支

image.png 提示自动合并a.txt文件失败,需要手动解决冲突然后提交
然后执行 vim add.txt 编辑a.txt文件

微信图片编辑_20240601224004.jpg 修改冲突后的内容为

$ cat a.txt
master bug
hot-fix bug

下一步添加到暂存区

image.png 然后在提交修改

image.png 注意:提交时不需要带上文件名,否则提示无法在合并过程中执行部分提交。提交后修改后可以发现,分支名称从master|MERGING变成了master,成功解决了合并冲突

3.团队合作

命令作用
git remote -v查看远程库
git remote add remote-name url添加远程库
git pull remote-name remote-branch拉取指定远程仓库和分支
git push remote-name local-branch推送特定分支
git clone url克隆项目到本地

3.1 Github

网址:github.com/

3.1.1创建一个项目仓库git-demo

image.png

3.1.2添加远程库

添加一个远程库仓库地址为git@github.com:xuzili2020/git-demo.git,叫叫git-demo的远程仓库
git remote add git-demo git@github.com:xuzili2020/git-demo.git

image.png

3.1.3提交代码

git push git-demo master

image.png 提示没有权限,无法推送。
使用ssh-keygen命令生成一个密钥。ssh-keygen 是一个用于生成 SSH 密钥对(公钥和私钥)的命令行工具。SSH 密钥对在 SSH(Secure Shell)协议中用于身份验证,允许你安全地连接到远程服务器,如 Git 仓库托管服务(例如 GitHub、GitLab 或 Bitbucket)。

image-20220827234648106.png 使用 cat ~/.ssh/id_rsa.pub查看密钥内容

image.png 复制输出的密钥内容,打开github中的设置,然后点击SSH and GPG key中的New SSH key

image.png 测试现在是否有权限, ssh -T git@github.com

image.png 再次推送,提示成功

image.png

3.1.4拉取代码

(1)手动修改远程仓库中a.txt的内容

image.png (2)执行git pull git-demo master,拉取代码

image.png

3.1.5克隆

git clone git@github.com:xuzili2020/git-demo.git

image.png 查看远程库

image.png 总结:clone操作,包含三步,第一是pull拉取代码,第二init初始化仓库,第三添加远程仓库。

4.IDEA集成Git

4.1配置Git忽略文件

问题1:为什么要忽略文件?
答:因为实际开发过程中,会存在一些与实际功能无关,不参与服务器上部署运行的文件(如.idea、target等)。把它们忽略掉,能够屏蔽IDE 工具之间的差异。

image.png 问题 2:怎么忽略?
1)创建忽略规则文件 xxxx.ignore(前缀名随便起,建议是 git.ignore) 这个文件的存放位置原则上在哪里都可以,为了便于让~.gitconfg 文件引用,建议也放在用 户家目录下

image.png 创建vim git.ignore文件,内容如下:

### IntelliJ IDEA ###
out/
!**/src/main/**/out/
!**/src/test/**/out/
*.iml
.idea


### Eclipse ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
bin/
!**/src/main/**/bin/
!**/src/test/**/bin/

### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
 
### VS Code ###
.vscode/

### Mac OS ###
.DS_Store


2)在.gitconfg 文件中引用忽略配置文件(此文件在 Windows 的家目录中)

[core]
    excludesfile=C:/Users/徐自力/git.ignore

注意:这里要使用“正斜线(/)”,不要使用“反斜线(\)”←