Git
git的工作流程
![](https://img.haomeiwen.com/i13983750/430bb6d301e5610e.png)
![](https://img.haomeiwen.com/i13983750/6a821189c58727b9.png)
基本流程
![](https://img.haomeiwen.com/i13983750/ee436a6c87724208.png)
git pull
![](https://img.haomeiwen.com/i13983750/dcd73b3faf32bba5.png)
一、Git的安装
https://git-scm.com/download/win
下载地址
![](https://img.haomeiwen.com/i13983750/3699e23454fbc7dd.png)
GITHUB下载比较慢,我们可以去国内镜像下载 https://npm.taobao.org/mirrors/git-for-windows/
下载之后一直下一步安装完即可。
安装完成后,邮件会多出来2个git开头的选项
![](https://img.haomeiwen.com/i13983750/f203811c2725e205.png)
双击GIt Bash Here. 在这种命令窗口下可以使用linux命名。
出现如下画面就可以输入git命令了
![](https://img.haomeiwen.com/i13983750/88e3e545709a97bb.png)
命令
1. git init
git init xxx
初始化 新建立一个代码仓库
![](https://img.haomeiwen.com/i13983750/56fe0a64488ae4ec.png)
然后adeng文件夹下面会多出来一个.get的文件夹
![](https://img.haomeiwen.com/i13983750/52959b79b21187be.png)
.git 文件夹下面有如下文件
.git下面的文件不要删,删了就不会被管理了
![](https://img.haomeiwen.com/i13983750/b7b0b15f4fb18df5.png)
2. git add .
git add a.txt
将a.txt文件提交到管理区。git status查看状态 文件是绿色
表示在暂存区。红色表示未被管理。如下图:
![](https://img.haomeiwen.com/i13983750/499ce1cbbf615c67.png)
3. git commit -m "本次提交说明"
git commit 提交到版本库
![](https://img.haomeiwen.com/i13983750/c423c0d4da8dc509.png)
第一次使用git commit -m "xxx"会出现如下画面
git config --global user.name "这里是你的github用户名"
git config --global user.email xxx@xxx.com(你的邮箱)
![](https://img.haomeiwen.com/i13983750/890fbe62d2f3622b.png)
怎么解决呢:
一次输入两行命名就行。
再次输入git commit -m "新增修改a文件数据"
就没有报错了
![](https://img.haomeiwen.com/i13983750/7487c2d403ce1845.png)
会在用户目录下有个.gitconfig文件,内容就是上面敲的2条命令中的 邮箱和用户名
![](https://img.haomeiwen.com/i13983750/ddd91148d440b65a.png)
4. git checkout . 当前路径下的文件回滚到提交前版本
上面我修改了a.txt文件的数据。
![](https://img.haomeiwen.com/i13983750/3b605709f003cbfd.png)
之前是没有数据的。现在a.txt已经在版本库里面了。这时候执行git checkout . 就会回到提交前。
5.git log 查看版本管理日志
- git reflog 显示当前分支最近提交
![](https://img.haomeiwen.com/i13983750/54a09130c5e19041.png)
6. git status 查看状态
7.git reset --hard 版本
版本号就是commit后面那一串字符,可以不用写全。如下
![](https://img.haomeiwen.com/i13983750/f2b4b2b54b01ce9b.png)
8. 如何忽略文件
- 新建的空文件夹,不会被管理。里面只要加了东西,git status就会红色
- 指定某些文件或者文件夹不被git管理
- 在项目根路径,跟.git文件夹一个路径,新建
.gitignore
文件
-
#
号 是注释,没有用 - 文件夹名字,表示 此文件夹不被管理
- 文件夹摸个文件想忽略 就写 想忽略的文件路径,支持通配符*
-
/dist
表示根路径下的dist文件夹,不被管理 - *.py 表示后缀为py文件的不被管理
-
*.log*
带有.log的任意文件不被管理 - !a.txt 除了a.txt不被管理
注意新建.gitignore时候后面多加个. 不然windows上面会报错
![](https://img.haomeiwen.com/i13983750/808dc2d6b41d5292.png)
.gitignore 创建好了如上图。
![](https://img.haomeiwen.com/i13983750/169b540e053e3033.png)
- 如下所看到git status c文件有东西的情况也没变红。.gitignore这个文件我们还是要管理的。
![](https://img.haomeiwen.com/i13983750/4eb415a9885a8c07.png)
想忽略文件夹下的某个文件。直接写上文件的路径在.gitignore里面
![](https://img.haomeiwen.com/i13983750/3dd2ef1662fed096.png)
![](https://img.haomeiwen.com/i13983750/b1a245f91fc83de4.png)
py结尾的文件没有提交到暂存区,其他都提交到了暂存区。如下图:
![](https://img.haomeiwen.com/i13983750/565560b9e7ee073d.png)
一般.gitignore如下图那么去写
![](https://img.haomeiwen.com/i13983750/50769bccd2106bb2.png)
分支操作
![](https://img.haomeiwen.com/i13983750/80350595cc57d31d.png)
- git branch 查看所有分支,如果是绿的,表示在当前分支上。
![](https://img.haomeiwen.com/i13983750/899feca0d202b7c6.png)
- git branch 分支名 创建分支
- git checkout 分支名 切换
![](https://img.haomeiwen.com/i13983750/7a243be76a8996a4.png)
- git branch -d 分支名 删除分支名
注意如果在分支上,是不能删除的.需要切换到master上在删除
![](https://img.haomeiwen.com/i13983750/e870482ec08e91b7.png)
- git checkout -b 分支名 创建并切换
- git branch -a 查看远程分支和本地分支
- git branch -r 查看远程分支
- git merge 分支名 把dev分支合并到master分支:
切换到master分支,执行合并dev分支的命令
。
分支合并注意点:
master: 主分支,主要用来版本发布。
develop:日常开发分支,该分支正常保存了开发的最新代码。
feature:具体的功能开发分支,只与 develop 分支交互。
release:release 分支可以认为是 master 分支的未测试版。比如说某一期的功能全部开发完成,那么就将 develop 分支合并到 release 分支,测试没有问题并且到了发布日期就合并到 master 分支,进行发布。
hotfix:线上 bug 修复分支
GITEE 账号注册
https://gitee.com
注册就不说了
配置SSH公钥
登录gitee--个人头像--设置--ssh公钥
![](https://img.haomeiwen.com/i13983750/c5ada8a2067555f8.png)
如何生成公钥步骤:
-
在个人用户目录【C:\Users\xxx】下简历一个.ssh的目录。创建目录需要输入
.ssh.
创立。 -
右键git bash here
-
输入
ssh-keygen -t rsa -C "xxxxx@xxxxx.com"
生成公钥和私钥。但是我们只要公钥
![](https://img.haomeiwen.com/i13983750/d2895ff06adb023a.png)
- 复制
.ssh
文件夹下面id_rsa.pub
文件的公钥粘贴到gitee上面ssh文本框里 - 添加后,在终端(Terminal)中输入
ssh -T git@gitee.com
详细设置ssh公钥参考地址:https://gitee.com/help/articles/4181#article-header0
码云创建一个自己的仓库
看图跟着走吧,一目了然
![](https://img.haomeiwen.com/i13983750/e0a7e526f031c6fd.png)
![](https://img.haomeiwen.com/i13983750/78517714e708aaf7.png)
这样gitee仓库就生成好了如下图
![](https://img.haomeiwen.com/i13983750/441db9100bfa546c.png)
pycharm继承GIT
pycharm新建一个项目。
git clone先拉取gitee上面创建的仓库地址。
将gitee仓库的所有文件复制到新建的项目里。
![](https://img.haomeiwen.com/i13983750/04dc28e1aefc2253.png)
重启pycharm会发现多出来如下git在图标
![](https://img.haomeiwen.com/i13983750/47cebf5858826317.png)
- 红色1.py 表示未被管理的状态
pycharm如何提交(相当于 git commit -m )
![](https://img.haomeiwen.com/i13983750/f61e9229737e62df.png)
![](https://img.haomeiwen.com/i13983750/3a63c141309e4af8.png)
提交之后:会图下图发现 没有任何红色了
![](https://img.haomeiwen.com/i13983750/165ca13ceb310712.png)
pycharm终端也可以输入 git命令进行提交 效果一样
pycharm git push到远程仓库
![](https://img.haomeiwen.com/i13983750/e64c81525bcb9a75.png)
1.py 和 2.py成功推送到了远程仓库
![](https://img.haomeiwen.com/i13983750/08128427dfb4c239.png)
init创建的仓库添加到gitee
使用url地址添加远程库 git remote add 远程仓库名 url 添加一个远程仓库
git remote add 远程仓库名 https://gitee.com/name/object_name.git
- git remote 查看关联的远程仓库的名称
- 查看远程库信息:git remote -v
- 移除和远程库的连接:git remote remove orgin
push推送到远程仓库
-
git push -u origin master
将本地分支的更新全部推送到远程仓库master分支。 -
git push origin -d <branchname>
删除远程branchname分支 -
git push --tags
推送所有标签
pulss 拉取远程仓库代码
-
git pull 拉取远程仓库所有分支更新并合并到本地分支。
-
git pull origin master 将远程master分支合并到当前本地分支
-
git pull origin master:master 将远程master分支合并到当前本地master分支,冒号后面表示本地分支
-
git fetch --all 拉取所有远端的最新代码
-
git fetch origin master 拉取远程最新master分支代码
免密登录
- git push -u origin master 这条命令老师要输入密码 如何免密?
1 . cd到home目录 cd ~
2.创建一个文件夹 touch .git-credentials
3.vi .git-credentials
输入 http://{用户名}:{密码}@gitee.com
github:github.com
- .gitconfig下面会多出来
[credential]
helper = store
![](https://img.haomeiwen.com/i13983750/23c9b9be5866f4fe.png)
git bash 过程
![](https://img.haomeiwen.com/i13983750/76c1aea06bd7ee7f.png)
一般的流程
git全局设置
git config --global user.name "这里是你的github用户名"
git config --global user.email "17740808@qq.com"
创建远程仓库
mkdir my_python
cd my_python
git init
touch README.MD
git status
git add .
git commit -m "第一次提交"
git remote add origin https://gitee.com/name/object_name.git
git push -u origin master
git pull
创建dev分支,并且切换到dev.
![](https://img.haomeiwen.com/i13983750/093e4cc4ea768c87.png)
本地分支有master和dev 远程这时候只有dev
![](https://img.haomeiwen.com/i13983750/c7dd3fcf10817bb6.png)
这时候把本地dev分支推送到远程dev分支。git push -u origin dev
![](https://img.haomeiwen.com/i13983750/56e9a4414d6cfea8.png)
![](https://img.haomeiwen.com/i13983750/727c24dfe0b98633.png)
删除远程dev 分支 git push -u origin -d dev
![](https://img.haomeiwen.com/i13983750/cc713251a19647b4.png)
![](https://img.haomeiwen.com/i13983750/e51a81df744e78ea.png)
git push 默认是推送到远程仓库 一摸一样的分支上面
![](https://img.haomeiwen.com/i13983750/0f5a5ef02e1c62c7.png)
而远程仓库有master dev两个分支,你拉取代码之后本地只有一个master,所以本地git push -u origin 指明远程仓库的分支名
否则会推送到和本地一抹一样的分支名上面。
分支合并
比如把dev分支合并到master分支。先git checkout master
然后在执行合并到master分支,get merge dev
![](https://img.haomeiwen.com/i13983750/19e54d7cdc1c7cc3.png)
pycharm合并,也是要先切换到master 然后如图操作
![](https://img.haomeiwen.com/i13983750/a71671e3d50e60a6.png)
解决版本冲突
先去gitee上面拉取一个仓库的代码
如下图从python_sduty.仓库拉取2次。
第一次放在I:\python20\softwaredate\python_sduty
第一次放在I:\python20\softwaredate\python_sduty1
git@gitee.com:adeng520/python_sduty.git
I:\python20\softwaredate\python_sduty1
![](https://img.haomeiwen.com/i13983750/7d2f8df22ec2b6ea.png)
![](https://img.haomeiwen.com/i13983750/7e59fc8059562056.png)
![](https://img.haomeiwen.com/i13983750/609c3959066c0ee0.png)
如图A B 两个开发,刚开始一模一样,都同时开发这个py文件
![](https://img.haomeiwen.com/i13983750/12bf8aaaa66eeedb.png)
B开发 添加了c=3 并且提交了代码
![](https://img.haomeiwen.com/i13983750/2b9cef98319ad692.png)
A开发 添加了一行 d=5的代码 如图
![](https://img.haomeiwen.com/i13983750/5ee9057620f2b440.png)
A开发这时候,先pull一下代码 结果发现冲突了
![](https://img.haomeiwen.com/i13983750/c60e691136ad0322.png)
![](https://img.haomeiwen.com/i13983750/6c3bfa563f09a182.png)
解决完冲突A开发 继续提交了代码到远程仓库
![](https://img.haomeiwen.com/i13983750/58bc716b813fec93.png)
最后push发现提交成功了,表示这次冲突完美解决
网友评论