返回顶部
首页 > 资讯 > 后端开发 > Python >Python全栈开发之Git
  • 209
分享到

Python全栈开发之Git

PythonGit 2023-01-31 00:01:58 209人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

No.1 git 特点 版本控制:可以解决多人同时开发的代码问题,也可以找回历史代码 分布式:Git是一个分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上,首先会有一台计算机充当服务器,这台计算机7*24小时服务,其他计算机都

No.1 git

特点

  • 版本控制:可以解决多人同时开发的代码问题,也可以找回历史代码
  • 分布式:Git是一个分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上,首先会有一台计算机充当服务器,这台计算机7*24小时服务,其他计算机都是从这台计算机克隆一份代码到自己的计算机中,并且各自把各自的修改提交到服务器仓库里,也可以从服务器仓库拉取别人的提交

安装

sudo apt-get install git -y

No.2 版本创建与回退

使用

创建一个版本库

git init

创建一个版本

git add test.txt
git commit -m 'v1.0'

查看工作区状态

get status

查看版本记录

git log
git log --pretty=oneline 将每次提交放到一行显示
git log --pretty=oneline --graph 以图形化方式显示每次提交

版本回退

git reset --hard HEAD^ 其中HEAD表示当前最新版本,一个^表示回退一个版本,有几个^表示回退几个版本
git reset --hard HEAD~1 1表示回退一个版本,那么10就是回退10个版本
git reset --hard HEAD

查看操作记录

git reflog

工作区、暂存区、版本库

  • 计算机中的目录就是一个工作区
  • 工作区中有一个隐藏目录.git,就是版本库,版本库中存在了许多东西,其中最重要的是stage(暂存区),还有一个是git为我们自动创建的第一个分支master,以及指向master的HEAD指针,因此第一个分支是master,所以当我们执行git commit的时候是向master分支上推送,git add 文件是将修改后的文件放到暂存区,git commit是将暂存区中的数据提交到工作区

管理修改

echo 'this is first line' >> test.txt
git add test.txt
echo 'this is first line' >> test.txt
git commit -m 'v1.1'
git status # 发现第二次修改test.txt文件后,并没有真正的加入到工作区,所以并没有提交到版本库
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   test.txt

no changes added to commit (use "git add" and/or "git commit -a")

撤销修改

撤销对test.txt文件的修改

get checkout -- test.txt

如果要撤销暂存区的修改时

git reset HEAD test.txt

对比文件

对比工作区中的test.txt文件和版本库中的有什么不同

git diff test.txt HEAD -- test.txt

对比两个版本中test.txt文件的不同

git diff HEAD HEAD^ -- test.txt

删除文件

我们将目录中的test.txt删除,git知道我们删除了文件,但是工作区和版本库就不知道了,所以我们执行git status就可以知道哪些文件被删除了

rm -rf test.txt
git status

现在我们有两个选择,一是确定这个文件要被删除,二是确定这个文件误删

# 1.
git rm test.txt
git commit
# 2.
git checkout -- test.txt

No.4 分支管理

创建与合并

git把我们每次提交的版本形成一条时间线,这个时间线就是一个分支,目前,这个分支叫master,每次提交后HEAD指向master,master指向提交,每次提交,master都会向前移动一步,所以这条时间线越来越长,当我们创建分支slave后,HEAD指向slave,指向新提交,从此,再次提交就会将版本提交到slave分支,而master不变,当我们在salve分支上的工作完成了,就可以合并分支

  • 查看分支 git branch
  • 创建并切换分支 git checkout -b <name>
  • 切换分支 git checkout <name>
  • 合并分支 git merge <name>
  • 删除分支 git branch -d <name>

解决冲突

合并也不是一帆风顺的,比如说,我在工作区中有一个test.txt文件,这个文件中没有任何数据,我在master分支中向第一行增加了一行数据,提交到版本库中,然后切换到slave,在这个文件中新增加了一行数据,然后提交到版本库中,再进行合并就会出现冲突

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master)
$ git checkout -b slave
Switched to a new branch 'slave'

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (slave)
$ cat test.txt
master:the new code

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (slave)
$ vi test.txt

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (slave)
$ cat test.txt
master:the new code
slave:the new code

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (slave)
$ git add test.txt

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (slave)
$ git commit -m '1.2'
[slave 5035bfb] 1.2
 1 file changed, 1 insertion(+)

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (slave)
$ git checkout master
Switched to branch 'master'

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master)
$ cat test.txt
master:the new code

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master)
$ vi test.txt

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master)
$ cat test.txt
master:the new code
master:the new code

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master)
$ git add test.txt

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master)
$ git commit -m '1.3'
[master e46f9b7] 1.3
 1 file changed, 2 insertions(+)

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master)
$ git merge slave
Auto-merging test.txt
CONFLICT (content): Merge conflict in test.txt
Automatic merge failed; fix conflicts and then commit the result.

# 解决冲突
kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master|MERGING)
$ cat test.txt
master:the new code
<<<<<<< HEAD
master:the new code

=======
slave:the new code
>>>>>>> slave

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master|MERGING)
$ vi test.txt

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master|MERGING)
$ cat test.txt
master:the new code
slave:the new code

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master|MERGING)
$ git add test.txt

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master|MERGING)
$ git commit -m '1.4'
[master b252477] 1.4

分支管理策略

通常,合并分支时,git会尽可能的使用fast forward模式,但是有时候快速合并没有成功但是也没有冲突,这个时候会合并之后做一次新的提交

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (slave)
$ vi test1.txt

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (slave)
$ cat test1.txt
add new code

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (slave)
$ git add test1.txt

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (slave)
$ git commit -m '1.5'
[slave 5fa46e2] 1.5
 1 file changed, 1 insertion(+)
 create mode 100644 test1.txt

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (slave)
$ git checkout master
Switched to branch 'master'

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master)
$ vi test.txt

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master)
$ cat test.txt
master:the new code
slave:the new code
master:add new code

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master)
$ git merge slave
Merge made by the 'recursive' strategy.
 test1.txt | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 test1.txt

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master)
$ git log --pretty=oneline
bee1e463867f605f16c3fbad6a50ea36f4e0b20a (HEAD -> master) 合并slave分支
5fa46e2ec62346526554b04b62a468afbde0f9ba (slave) 1.5
b2524777899baab52783e1b49360fedc1e6a7e50 1.4
e46f9b7b5c379238ddca5db70746bc4f9f8c5edc 1.3
5035bfba43172b02bdbb7447fd9ebb018e6f49f5 1.2
2ae2bcac4258f41cb1a1e3a3a81a572be80c28f9 1.1
8d3Dee945a68e5996d9c088a9769f43fc5c75228 1.0

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master)
$ git log --pretty=oneline --graph
*   bee1e463867f605f16c3fbad6a50ea36f4e0b20a (HEAD -> master) 合并slave分支
|\
| * 5fa46e2ec62346526554b04b62a468afbde0f9ba (slave) 1.5
* |   b2524777899baab52783e1b49360fedc1e6a7e50 1.4
|\ \
| |/
| * 5035bfba43172b02bdbb7447fd9ebb018e6f49f5 1.2
* | e46f9b7b5c379238ddca5db70746bc4f9f8c5edc 1.3
|/
* 2ae2bcac4258f41cb1a1e3a3a81a572be80c28f9 1.1
* 8d3dee945a68e5996d9c088a9769f43fc5c75228 1.0

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master)
$ git branch -d slave
Deleted branch slave (was 5fa46e2).

但是快速合并分支后删除分支会丢失掉分支信息,所以我们很多时候需要禁用快速合并

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master)
$ git checkout -b slave
Switched to a new branch 'slave'
M       test.txt

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (slave)
$ vi test2.txt

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (slave)
$ git add test2.txt

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (slave)
$ git commit -m '1.6'
[slave 1e833e6] 1.6
 1 file changed, 2 insertions(+)
 create mode 100644 test2.txt

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (slave)
$ git checkout master
Switched to branch 'master'
M       test.txt

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master)
$ git merge --no-ff -m '禁用快速合并' slave
Merge made by the 'recursive' strategy.
 test2.txt | 2 ++
 1 file changed, 2 insertions(+)
 create mode 100644 test2.txt

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master)
$ git log --graph --pretty=oneline
*   cabeb0f4edc6617d27e1a7624be927a0f5f7da59 (HEAD -> master) 禁用快速合并
|\
| * 1e833e62109f3dd266883834bf11014d85c4a3dc (slave) 1.6
|/
*   bee1e463867f605f16c3fbad6a50ea36f4e0b20a 合并slave分支
|\
| * 5fa46e2ec62346526554b04b62a468afbde0f9ba 1.5
* |   b2524777899baab52783e1b49360fedc1e6a7e50 1.4
|\ \
| |/
| * 5035bfba43172b02bdbb7447fd9ebb018e6f49f5 1.2
* | e46f9b7b5c379238ddca5db70746bc4f9f8c5edc 1.3
|/
* 2ae2bcac4258f41cb1a1e3a3a81a572be80c28f9 1.1
* 8d3dee945a68e5996d9c088a9769f43fc5c75228 1.0

bug分支

软件开发中,出现bug是经常性的事情,在git中,每个bug可以通过一个临时分支来修复,修复后删除分支,假如突然出现一个bug就需要立即修复,但是该分支的工作还没有完成,没有完成就没办法进行提交,所以就用到了git中的保存现场功能(stash)

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master)
$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   test.txt

no changes added to commit (use "git add" and/or "git commit -a")

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master)
$ git stash
Saved working directory and index state WIP on master: cabeb0f 禁用快速合并

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master)
$ git status
On branch master
nothing to commit, working tree clean

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master)
$ git checkout slave
Switched to branch 'slave'

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (slave)
$ git checkout -b bug001
Switched to a new branch 'bug001'

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (bug001)
$ vi test.txt

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (bug001)
$ git add test.txt

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (bug001)
$ git commit -m 'bug001修复完成'
[bug001 aab106b] bug001修复完成
 1 file changed, 1 deletion(-)

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (bug001)
$ git checkout slave
Switched to branch 'master'

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (slave)
$ git merge bug001
Merge made by the 'recursive' strategy.
 test.txt | 1 -
 1 file changed, 1 deletion(-)

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (slave)
$ git branch -d bug001
Deleted branch bug001 (was aab106b).

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (slave)
$ git checkout master
Switched to branch 'master'

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master)
$ git stash list
stash@{0}: WIP on master: cabeb0f 禁用快速合并

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master)
$ git stash pop
Gon branch slave
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   test.txt

no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (8fe9c203f75afc7929433faabc52e02a6d555ff4)

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master)
$ git status
On branch slave
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   test.txt

no changes added to commit (use "git add" and/or "git commit -a")

No.5 使用GitHub

添加ssh账户

如果某台机器需要与GitHub进行交互,那么就要把这台机器的ssh公钥添加到GitHub账户上

  1. 编辑.github文件,使用ssh-keygen -t rsa -C "邮箱地址",生成ssh密钥

  2. 点击账户头像后的下拉三角,选择settings,选择SSH and GPG keys选项,单击New SSH keys,复制id_rsa.pub文件里的内容,点击Add SSH key

克隆项目

git clone 项目地址

上传分支

git push origin 分支名称

跟踪远程分支

git branch --set-upstream-to=origin/slave master

当本地成功跟踪远程分支后,当修改代码后,只需要git push就可以将修改提交到远程

从远程分支拉取代码

git pull origin 分支名称

--结束END--

本文标题: Python全栈开发之Git

本文链接: https://lsjlt.com/news/183041.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python全栈开发之Git
    No.1 Git 特点 版本控制:可以解决多人同时开发的代码问题,也可以找回历史代码 分布式:Git是一个分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上,首先会有一台计算机充当服务器,这台计算机7*24小时服务,其他计算机都...
    99+
    2023-01-31
    Python Git
  • Python全栈开发之---assert
    一、python assert的作用: 根据Python 官方文档解释(https://docs.python.org/3/reference/simple_stmts.html#assert), "Assert statements a...
    99+
    2023-01-30
    Python assert
  • Python全栈开发之---mysql数
    1、数据库的安装和连接 1 #数据库安装 2 pip install PyMySQL 3 4 #数据库操作 5 import pymysql 6 7 db = pymysql.connect("数据库ip","用户",...
    99+
    2023-01-30
    Python mysql
  • Python全栈开发之函数
    No.1 函数介绍 所谓函数,就是把具有独立功能的代码块组织为一个小模块,在需要的时候调用 函数的使用有两个步骤:1、定义函数2、调用函数 函数的作用,代码重用,提高开发效率 No.2 定义和调用 定义函数的格式如下: def 函数名():...
    99+
    2023-01-31
    函数 Python
  • python全栈开发之Python基础(
    一、 基础知识 python的运行方式有两种: 第一种通过交互式的运行方式,通过 "开始"—>"所有程序" —> "python3.x" —>"IDLE" 运行。 第二种是我们写好的Python文件双击运行。 ...
    99+
    2023-01-31
    基础 python Python
  • Python全栈开发之并发编程
    No.1 线程 什么是多任务 就是操作系统可以同时运行多个任务,就是可以一边用浏览器上网,同时又可以听歌,还能再撩个×××姐,这就是多任务,操作系统会轮流把系统调度到每个核心上去执行 并发和并行 并发是指任务数多余cpu核数,通过操作系统的...
    99+
    2023-01-31
    Python
  • Python全栈开发之---装饰器
    1、装饰器的形成过程 1 import time 2 3 def func1(): 4 print('in func1') 5 6 def timer(func): 7 def inner(): 8...
    99+
    2023-01-30
    Python
  • Python全栈开发之Django基础
    No.1 MVC&MTV MVC M全拼为Model,主要封装对数据库层的访问,对数据库中的数据进行增、删、改、查操作 V全拼为View,用于封装结果,生成页面展示的html内容 C全拼为Controller,用于接收请求,处理业务...
    99+
    2023-01-31
    基础 Python Django
  • Python全栈开发之Django进阶
    No.1 静态文件处理 项目中CSS、JS、图片都属于静态文件,一般会将静态文件存到一个单独目录中,便于管理,在HTML页面调用时,需要指定静态文件的路径,Django提供了一种解析静态文件的机制,文件可以放在项目目录下,也可以放在应用目录...
    99+
    2023-01-31
    进阶 Python Django
  • Python全栈开发之文件操作
    No.1 文件的概念 文件的概念和作用 计算机中的文件,就是存储在某种长期储存设备上的一段数据流 计算机中的文件,可以在需要的时候使用 文件的存储方式 文本文件 可以使用文本编辑器查看 本质上还是二进制文件 二进制文件 保留的内容不能直接...
    99+
    2023-01-31
    操作 文件 Python
  • Python全栈开发之网络编程
    No.1 TCP/IP 早期的计算机网络,都是由厂商规定自己的通信协议,互不兼容,为了把全世界不同类型的计算机连接起来,就必须规定一套全球通用的协议,所以就出现了TCP/IP No.2 Socket简介 要解决怎么标识一个进制,在一台电...
    99+
    2023-01-31
    网络编程 Python
  • Python全栈开发之面向对象
    No.1 概念 面向对象的特点? 注重对象和指责,不同的对象承担各自的指责 更加适合对复杂的需求变化,专门应对复杂项目开发,提供固定的套路 面向对象强调的是谁来做,面向过程强调的如何做 什么是类 类是对一群具有相同特征或者行为的事物统称,是...
    99+
    2023-01-31
    面向对象 Python
  • Python全栈开发之基础语法
    No.1 Python语言介绍 详情见百度百科。。。 No.2 Python是一门怎么样的语言 详情在百度百科。。。 No.3 Python能做什么 网络应用、桌面应用、系统运维、机器学习、科学计算。。。 网络应用 Django/Flas...
    99+
    2023-01-31
    语法 基础 Python
  • Python全栈开发之异常处理
    No.1 异常的概念 程序在运行过程中,遇到一个错误,会停止程序的运行,并且提示一些错误信息,这就是异常 程序停止执行并且提示错误信息这个动作,称为抛出异常 No.2 捕获异常 简单捕获异常格式 捕获异常最简单的语法格式: try: ...
    99+
    2023-01-31
    异常 Python
  • Python全栈开发之常用模块
    No.1 sys sys模块是与Python解释器交互的一个接口 sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0),错误退出sys.exit(1) sys.vers...
    99+
    2023-01-31
    模块 常用 Python
  • python 全栈之路
    目录 Python 全栈之路 一. Python 1. Python基础知识部分 2. Python -函数 3. ...
    99+
    2023-01-30
    之路 python
  • python全栈开发指的是什么
    这篇文章主要介绍python全栈开发指的是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!python有哪些常用库python常用的库:1.requesuts;2.scrapy;3.pillow;4.twisted...
    99+
    2023-06-14
  • Python全栈之路系列之Python
    The Python interpreter has a number of functions and types built into it that are always available. They are listed her...
    99+
    2023-01-31
    之路 系列之 Python
  • 学python入门有用吗?Python全栈开发
      随着云计算时代的到来,如何在应用程序开发的同时筛选有意义的数据以进行专业处理也逐渐成为每个开发企业需要考虑的问题。随着Python编程语言的兴起,越来越受企业的喜爱,也吸引了大量的人们开始学习,并进入it互联网领域。  什么是Pytho...
    99+
    2023-06-02
  • Win10构建Python全栈开发环境W
    目录 Win10构建Python全栈开发环境With WSL 启动WSL 总结 对《Dev on Windows with WSL》的...
    99+
    2023-01-30
    环境 Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作