Git使用教程
目录[*]1. 主要的两类版本控制模式
[*]1.1 集中式控制(代表:SVN)
[*]1.11 简介
[*]1.12 优点
[*]1.13 缺点
[*]1.2 分布式控制(代表:GIT)
[*]1.21 简介
[*]1.22 优点
[*]1.23 缺点
[*]2. GIT的环境安装
[*]2.1 通过Homebrew安装
[*]2.2 官网下载安装包安装
[*]3. GIT使用教程
[*]3.1 介绍
[*]3.2 GIT环境配置
[*]3.3 GIT基本理论
[*]3.31 工作区域
[*]3.32 工作流程
[*]3.4 GIT仓库搭建
[*]3.41 本地仓库搭建
[*]3.42 克隆远程仓库进本地
[*]3.5 GIT文件操作
[*]3.51 文件的四种状态
[*]3.52 文件操作
[*]3.53 忽略文件
[*]3.6 使用远程仓库(以码云为例)
[*]3.61 实现免密码登陆
[*]3.62 远程仓库操作
[*]3.7 GIT分支
[*]3.71 简介
[*]3.72 分支命令
[*]3.73 分支冲突
[*]4. IDEA中集成GIT操作(PyCharm)
[*]4.1 新建项目并绑定GIT
[*]4.2 使用PyCharm操作GIT
[*]5. GitLab(自建代码托管平台)
[*]5.1介绍
[*]5.2 如何安装
[*]5.21 服务器准备
[*]GIT命令快查表
[*]仓库
[*]配置
[*]增加/删除文件
[*]代码提交
[*]分支
[*]标签
[*]查看信息
[*]远程同步
[*]撤销
[*]其他
1. 主要的两类版本控制模式
1.1 集中式控制(代表:SVN)
1.11 简介
[*]有一台主要的服务器,所有的版本信息都保存在该服务器当中,每当有成员修改了项目,需要提交到服务器当中,另一个成员要使用项目时,需要从服务器当中下载最新的项目
1.12 优点
[*]具有隐私性,当所有的项目信息只存在于服务器当中
[*]易查看所有保存的版本信息
1.13 缺点
[*]当服务器瘫痪或损坏时,就不能进行进行版本控制了,甚至可能导致数据丢失
[*]当断网时,不可进行版本控制
1.2 分布式控制(代表:GIT)
1.21 简介
[*]和集中式相反,每个成员都保存着所有的版本信息,每当有成员提交项目时,会先保存在本机上,然后再上传至主服务器和其他成员,而每当有成员要修改项目内容时,只需要在修改完本地的项目后相互推送给对方即可,就可以互相看到双方的修改了
1.22 优点
[*]不易丢失数据,当主服务器或者成员电脑损坏后,可以直接从其他成员那备份到完成的数据过来
[*]断网时仍然可以更新版本,因为所有的版本都在自己的电脑上了,不会因为暂时性没网而停止工作
1.23 缺点
[*]容易导致隐私泄漏,因为每个成员的电脑上均保存着所有的版本信息,所以成员可以直接将电脑上的所有信息泄漏出去
2. GIT的环境安装
2.1 通过Homebrew安装
[*]如果电脑有装homebrew的话,直接终端执行brew install git即可
2.2 官网下载安装包安装
[*]官网链接:https://git-scm.com
[*]https://www.cnblogs.com/Users/zhang/Library/Application Support/typora-user-images/image-20220111184054740.png
[*]https://www.cnblogs.com/Users/zhang/Library/Application Support/typora-user-images/image-20220111184136184.png
3. GIT使用教程
3.1 介绍
[*]GIT有三种基本的操作方式
[*]Bash:Linux命令行
[*]Gui:图形操作界面
[*]CMD:Windows命令行
[*]最方便且最通用的是Bash操作方式
3.2 GIT环境配置
[*]# 查看当前用户的所有配置
git config -l
# 查看本地系统配置 -- 系统自动配置的信息
git config --system --list
# 查看本地用户配置 -- 用户自己配置的信息
git config --global --list
# 设置用户配置 -- 因为在使用git提交项目时,其他成员需要知道是谁提交的
# 所以每个成员需要设置自己的用户名、邮箱
git config --global user.name "用户名"
git config --global user.email "邮箱"
3.3 GIT基本理论
3.31 工作区域
[*]Git本地有三个工作区域:
[*]工作区(Working Directory):平时存放项目代码的地方
[*]暂存区(Stage/index):用于临时存放项目的改动,实际上只是一个文件,保存即将提交到文件列表信息
[*]资源库(Git Directory):本地仓库,存放数据的地方,里面存放着提交到所有版本的数据,其中HEAD文件指向最新放入仓库的版本
[*]Git远程有一个工作区域:
[*]Git仓库(Remote Directory):像类似GitHub、Gitee等远程托管仓库,存放着我们推送上去的版本信息
3.32 工作流程
[*]在工作区添加,修改文件
[*] git add 文件 # 将工作区的文件放入暂存区
[*]将需要进行版本管理的文件放入暂存区
[*] git commit # 将暂存区文件提交到本地仓库
[*]将暂存区的文件提交到本地仓库
[*] git push # 将本地仓库文件推送到远程仓库
[*]如果需要提交到远程仓库,则继续将本地仓库的数据提交到远程仓库进行托管
3.4 GIT仓库搭建
3.41 本地仓库搭建
[*]用cd切换进工作目录
[*]输入 git init初始化工作区,会在工作目录中创建一个.git的隐藏文件
3.42 克隆远程仓库进本地
[*]在GitHub/Gitee的仓库中,会有一个克隆按钮,复制其中的链接
[*]https://www.cnblogs.com/Users/zhang/Library/Application Support/typora-user-images/image-20220111204116399.png
[*]利用cd切换进工作目录
[*]使用如下命令将远程服务器上的仓库完全镜像一份到本地仓库中
[*] git clone 在GitHub/Gitee上所复制的链接
3.5 GIT文件操作
3.51 文件的四种状态
[*]未跟踪(Untracked):文件在文件目录内,但并没有加到本地仓库中,所以不参与版本控制,可以通过 git add将状态变成暂存状态
[*]未修改(Unmodify):文件已入库,但是没有修改,即本地仓库内的文件快照与文件目录下的数据完全一致,因为我们进行版本控制的目的是为了控制每次所修改的文件,而文件若没有修改,就无需使用版本控制了,可以使用如下两种方法改变此状态
[*]修改该文件,文件就会自动变成已修改状态
[*]使用git rm进行移出本地仓库,则会变成未跟踪状态
[*]已修改(Modified):文件已修改,但是还未进行其他操作,有以下操作改变此状态
[*]使用git add将其放入暂存区,使其变成暂存状态
[*]使用git checkout丢弃已修改的内容,将会返回成未修改状态
[*]暂存状态(Staged):当更新或修改完的要进行版本控制的文件后,文件则会变成暂存状态,有如下操作
[*]执行git commit将已修改的文件同步至本地仓库,此时本地仓库的文件与本地目录的文件又变成一致的,此时本地的文件又会变成未修改状态
[*]执行git reset HEAD filename取消保存本地仓库,文件状态为已修改
3.52 文件操作
[*]使用git status来查看文件状态
[*]当文件目录没有文件时,在终端中输入上述命令会显示如下信息
[*]https://www.cnblogs.com/Users/zhang/Library/Application Support/typora-user-images/image-20220111212023162.png
[*]当在文件目录创建了一个未跟踪的文件hello.txt时
[*]https://www.cnblogs.com/Users/zhang/Library/Application Support/typora-user-images/image-20220111212112944.png
[*]当将该文件用git add .添加进暂存区时,会显示
[*]https://www.cnblogs.com/Users/zhang/Library/Application Support/typora-user-images/image-20220111212215333.png
[*]当使用git commit -m将文件提交至本地仓库中,会显示
[*]https://www.cnblogs.com/Users/zhang/Library/Application Support/typora-user-images/image-20220111213142053.png
3.53 忽略文件
[*]当我们不想提交某些文件进入仓库中时,可以在工作目录下建立.gitignore文件,该文件规则如下
[*]忽略文件中以#或空格开头的行将被忽略
[*]可以使用Linux通配符来忽略
[*]例如:*.txt # 忽略所有以.txt结尾的文件
[*]在文件名前加!表示例外规则,该文件将不被忽略
[*]!lib.txt # 该文件不会被忽略
[*]文件名前加/表示该文件内除子目录以外的所有文件均忽略
[*]例如有一个这样的文件结构
[*]https://www.cnblogs.com/Users/zhang/Library/Application Support/typora-user-images/image-20220112112227198.png
[*]可以看到git_test_file里有一个文件hello.txt,和一个子目录lalala
[*]当使用/git_test_file的时候,只会忽略hello.txt,而不会忽略lalala子目录里的内容
[*]文件名后加/忽略目录下所有文件
[*]git_test_file/ # 会忽略该目录下的所有文件,包括子目录
[*]上述操作可以嵌套使用
[*]doc/*.txt # 忽略doc目录下的所有以.txt结尾的文件
3.6 使用远程仓库(以码云为例)
3.61 实现免密码登陆
[*]设置本地绑定SSH公钥
[*]首先进入本地的.ssh目录,MacOs在/Users/用户名/.ssh下
[*]生成公钥,在终端中输入ssh-keygen,若想加密自己的公钥,可以输入ssh-keygen -t rsa
[*]生成公钥后,会在.ssh下生成两个文件,id_rsa是私钥,id_rsa.pub为公钥
[*]https://www.cnblogs.com/Users/zhang/Library/Application Support/typora-user-images/image-20220112114915294.png
[*]将刚生成的公钥打开,将里面的内容复制到码云信息当中去
[*]https://www.cnblogs.com/Users/zhang/Library/Application Support/typora-user-images/image-20220112160841224.png
[*]添加完成后在当前页面出现已绑定的公钥,到这步就完成了本机仓库与远程仓库之间的免密码登陆
[*]https://www.cnblogs.com/Users/zhang/Library/Application Support/typora-user-images/image-20220112161126950.png
3.62 远程仓库操作
[*]新建远程仓库
[*]https://www.cnblogs.com/Users/zhang/Library/Application Support/typora-user-images/image-20220112161458982.png
[*]https://www.cnblogs.com/Users/zhang/Library/Application Support/typora-user-images/image-20220112162445839.png
[*]创建完远程仓库后将本地仓库链接到远程仓库
[*]git clone 远程仓库链接见3.42
3.7 GIT分支
3.71 简介
[*]每个项目都有一个主分支,一般设置成master或main
[*]https://www.cnblogs.com/Users/zhang/Library/Application Support/typora-user-images/image-20220112200922911.png
[*]如上图所示,该项目有6个分支,分支可以用来当作某个大版本,比如你想要你的项目有版本1版本2等等,就可以弄出两个版本分支
3.72 分支命令
[*]# 列出所有本地分支
git branch
# 列出远程所有分支
git branch -r
# 新建一个分支,但还是停留在原分支
git branch
# 新建一个分支,并切换至该分支
git branch -b
# 合并指定分支到当前分支
git merge
# 删除本地分支
git branch -d
# 删除远程分支
git push origin --delete
git branch -dr
# 切换分支
git checkout
3.73 分支冲突
[*]当多个分支存在冲突时,比如存在两个分支,A分支和B分支,B分支上的程序需要用到A分支的内容,于是就将A分支拉取下来合并到了B分支中,而且在使用A分支内容的时候,又修改了A分支的数据,而在这个时候,A分支的开发者又在A上修改了一定的数据,从而导致了仓库不知道保存哪个开发者的信息了,这就是冲突
[*]解决办法:我们可以互相协商后,然后修改冲突文件重新提交即可,比如是保存A所修改的内容还是B所修改的内容
[*]一般在开发的时候,主分支应该保持稳定的状态,所以一般不在主分支上进行工作,会创建其他的分支进行工作,当在其他的分支完成工作后且测试温度后,再将其和主分支进行合并发布
4. IDEA中集成GIT操作(PyCharm)
4.1 新建项目并绑定GIT
[*]用pycharm把项目创建在工作区内
[*]https://www.cnblogs.com/Users/zhang/Library/Application Support/typora-user-images/image-20220112165627283.png
[*]打开远程仓库所克隆的本地项目目录,将该目录下所有文件替换拷贝进pycharm所创建的项目目录内即可完成Git绑定(包括隐藏文件,Mac上用“command+shift+.”显示隐藏文件)
4.2 使用PyCharm操作GIT
[*]一般的IDEA都会嵌入Git操作,PyCharm如下图所示
[*]https://www.cnblogs.com/Users/zhang/Library/Application Support/typora-user-images/image-20220112171113545.png
[*]版本控制按钮可以看到仓库的所有进行过的操作
[*]https://www.cnblogs.com/Users/zhang/Library/Application Support/typora-user-images/image-20220112171338958.png
[*]然后就可以进行Git操作了
[*]可以直接在pycharm里的终端输入命令来提交推送
[*]也可以手动点击按钮来提交推送
5. GitLab(自建代码托管平台)
5.1介绍
[*]GitLab是一个自建代码托管平台,可以安装在自己服务器当中,效果类似于GitHub/Gitee,只不过GitHub/Gitee是他人代码平台
5.2 如何安装
5.21 服务器准备
[*]
GIT命令快查表
仓库
# 在当前目录新建一个Git代码库
$ git init
# 新建一个目录,将其初始化为Git代码库
$ git init
# 下载一个项目和它的整个代码历史
$ git clone 配置
# 显示当前的Git配置
$ git config --list
# 编辑Git配置文件
$ git config -e [--global]
# 设置提交代码时的用户信息
$ git config [--global] user.name ""
$ git config [--global] user.email ""增加/删除文件
# 添加指定文件到暂存区
$ git add ...
# 添加指定目录到暂存区,包括子目录
$ git add
# 添加当前目录的所有文件到暂存区
$ git add .
# 添加每个变化前,都会要求确认
# 对于同一个文件的多处变化,可以实现分次提交
$ git add -p
# 删除工作区文件,并且将这次删除放入暂存区
$ git rm ...
# 停止追踪指定文件,但该文件会保留在工作区
$ git rm --cached
# 改名文件,并且将这个改名放入暂存区
$ git mv 代码提交
# 提交暂存区到仓库区
$ git commit -m
# 提交暂存区的指定文件到仓库区
$ git commit ... -m
# 提交工作区自上次commit之后的变化,直接到仓库区
$ git commit -a
# 提交时显示所有diff信息
$ git commit -v
# 使用一次新的commit,替代上一次提交
# 如果代码没有任何新变化,则用来改写上一次commit的提交信息
$ git commit --amend -m
# 重做上一次commit,并包括指定文件的新变化
$ git commit --amend ...分支
# 列出所有本地分支
$ git branch
# 列出所有远程分支
$ git branch -r
# 列出所有本地分支和远程分支
$ git branch -a
# 新建一个分支,但依然停留在当前分支
$ git branch
# 新建一个分支,并切换到该分支
$ git checkout -b
# 新建一个分支,指向指定commit
$ git branch
# 新建一个分支,与指定的远程分支建立追踪关系
$ git branch --track
# 切换到指定分支,并更新工作区
$ git checkout
# 切换到上一个分支
$ git checkout -
# 建立追踪关系,在现有分支与指定的远程分支之间
$ git branch --set-upstream
$ git branch --set-upstream-to=
# 合并指定分支到当前分支
$ git merge
# 选择一个commit,合并进当前分支
$ git cherry-pick
# 删除分支
$ git branch -d
# 删除远程分支
$ git push origin --delete
$ git branch -dr 标签
# 列出所有tag
$ git tag
# 新建一个tag在当前commit
$ git tag
# 新建一个tag在指定commit
$ git tag
# 删除本地tag
$ git tag -d
# 删除远程tag
$ git push origin :refs/tags/
# 查看tag信息
$ git show
# 提交指定tag
$ git push
# 提交所有tag
$ git push --tags
# 新建一个分支,指向某个tag
$ git checkout -b 查看信息
# 显示有变更的文件
$ git status
# 显示当前分支的版本历史
$ git log
# 显示commit历史,以及每次commit发生变更的文件
$ git log --stat
# 搜索提交历史,根据关键词
$ git log -S
# 显示某个commit之后的所有变动,每个commit占据一行
$ git log HEAD --pretty=format:%s
# 显示某个commit之后的所有变动,其"提交说明"必须符合搜索条件
$ git log HEAD --grep feature
# 显示某个文件的版本历史,包括文件改名
$ git log --follow
$ git whatchanged
# 显示指定文件相关的每一次diff
$ git log -p
# 显示过去5次提交
$ git log -5 --pretty --oneline
# 显示所有提交过的用户,按提交次数排序
$ git shortlog -sn
# 显示指定文件是什么人在什么时间修改过
$ git blame
# 显示暂存区和工作区的差异
$ git diff
# 显示暂存区和上一个commit的差异
$ git diff --cached
# 显示工作区与当前分支最新commit之间的差异
$ git diff HEAD
# 显示两次提交之间的差异
$ git diff ...
# 显示今天你写了多少行代码
$ git diff --shortstat "@{0 day ago}"
# 显示某次提交的元数据和内容变化
$ git show
# 显示某次提交发生变化的文件
$ git show --name-only
# 显示某次提交时,某个文件的内容
$ git show :
# 显示当前分支的最近几次提交
$ git reflog远程同步
# 下载远程仓库的所有变动
$ git fetch
# 显示所有远程仓库
$ git remote -v
# 显示某个远程仓库的信息
$ git remote show
# 增加一个新的远程仓库,并命名
$ git remote add
# 取回远程仓库的变化,并与本地分支合并
$ git pull
# 上传本地指定分支到远程仓库
$ git push
# 强行推送当前分支到远程仓库,即使有冲突
$ git push --force
# 推送所有分支到远程仓库
$ git push --all撤销
# 恢复暂存区的指定文件到工作区
$ git checkout
# 恢复某个commit的指定文件到暂存区和工作区
$ git checkout
# 恢复暂存区的所有文件到工作区
$ git checkout .
# 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变
$ git reset
# 重置暂存区与工作区,与上一次commit保持一致
$ git reset --hard
# 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变
$ git reset
# 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
$ git reset --hard
# 重置当前HEAD为指定commit,但保持暂存区和工作区不变
$ git reset --keep
# 新建一个commit,用来撤销指定commit
# 后者的所有变化都将被前者抵消,并且应用到当前分支
$ git revert
暂时将未提交的变化移除,稍后再移入
$ git stash
$ git stash pop其他
# 生成一个可供发布的压缩包
$ git archive
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]