热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:Python全栈开发之Git

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Python全栈开发之Git相关的知识,希望对你有一定的参考价值。No.1Git特

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Python全栈开发之Git相关的知识,希望对你有一定的参考价值。



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 ..." to update what will be committed)
(use "git checkout -- ..." 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

  • 切换分支 git checkout

  • 合并分支 git merge

  • 删除分支 git branch -d


解决冲突

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

[email protected] MINGW64 /d/Codes/Git/test (master)
$ git checkout -b slave
Switched to a new branch ‘slave‘
[email protected] MINGW64 /d/Codes/Git/test (slave)
$ cat test.txt
master:the new code
[email protected] MINGW64 /d/Codes/Git/test (slave)
$ vi test.txt
[email protected] MINGW64 /d/Codes/Git/test (slave)
$ cat test.txt
master:the new code
slave:the new code
[email protected] MINGW64 /d/Codes/Git/test (slave)
$ git add test.txt
[email protected] MINGW64 /d/Codes/Git/test (slave)
$ git commit -m ‘1.2‘
[slave 5035bfb] 1.2
1 file changed, 1 insertion(+)
[email protected] MINGW64 /d/Codes/Git/test (slave)
$ git checkout master
Switched to branch ‘master‘
[email protected] MINGW64 /d/Codes/Git/test (master)
$ cat test.txt
master:the new code
[email protected] MINGW64 /d/Codes/Git/test (master)
$ vi test.txt
[email protected] MINGW64 /d/Codes/Git/test (master)
$ cat test.txt
master:the new code
master:the new code
[email protected] MINGW64 /d/Codes/Git/test (master)
$ git add test.txt
[email protected] MINGW64 /d/Codes/Git/test (master)
$ git commit -m ‘1.3‘
[master e46f9b7] 1.3
1 file changed, 2 insertions(+)
[email protected] 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.
# 解决冲突
[email protected] MINGW64 /d/Codes/Git/test (master|MERGING)
$ cat test.txt
master:the new code
<<<<<=======
slave:the new code
>>>>>>> slave
[email&#160;protected] MINGW64 /d/Codes/Git/test (master|MERGING)
$ vi test.txt
[email&#160;protected] MINGW64 /d/Codes/Git/test (master|MERGING)
$ cat test.txt
master:the new code
slave:the new code
[email&#160;protected] MINGW64 /d/Codes/Git/test (master|MERGING)
$ git add test.txt
[email&#160;protected] MINGW64 /d/Codes/Git/test (master|MERGING)
$ git commit -m ‘1.4‘
[master b252477] 1.4

分支管理策略

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

[email&#160;protected] MINGW64 /d/Codes/Git/test (slave)
$ vi test1.txt
[email&#160;protected] MINGW64 /d/Codes/Git/test (slave)
$ cat test1.txt
add new code
[email&#160;protected] MINGW64 /d/Codes/Git/test (slave)
$ git add test1.txt
[email&#160;protected] 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
kerne[email&#160;protected] MINGW64 /d/Codes/Git/test (slave)
$ git checkout master
Switched to branch ‘master‘
[email&#160;protected] MINGW64 /d/Codes/Git/test (master)
$ vi test.txt
[email&#160;protected] MINGW64 /d/Codes/Git/test (master)
$ cat test.txt
master:the new code
slave:the new code
master:add new code
[email&#160;protected] 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
[email&#160;protected] 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
[email&#160;protected] 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
[email&#160;protected] MINGW64 /d/Codes/Git/test (master)
$ git branch -d slave
Deleted branch slave (was 5fa46e2).

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

[email&#160;protected] MINGW64 /d/Codes/Git/test (master)
$ git checkout -b slave
Switched to a new branch ‘slave‘
M test.txt
[email&#160;protected] MINGW64 /d/Codes/Git/test (slave)
$ vi test2.txt
[email&#160;protected] MINGW64 /d/Codes/Git/test (slave)
$ git add test2.txt
[email&#160;protected] 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
[email&#160;protected] MINGW64 /d/Codes/Git/test (slave)
$ git checkout master
Switched to branch ‘master‘
M test.txt
[email&#160;protected] 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
[email&#160;protected] 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)

[email&#160;protected] MINGW64 /d/Codes/Git/test (master)
$ git status
On branch master
Changes not staged for commit:
(use "git add ..." to update what will be committed)
(use "git checkout -- ..." to discard changes in working directory)
modified: test.txt
no changes added to commit (use "git add" and/or "git commit -a")
[email&#160;protected] MINGW64 /d/Codes/Git/test (master)
$ git stash
Saved working directory and index state WIP on master: cabeb0f 禁用快速合并
[email&#160;protected] MINGW64 /d/Codes/Git/test (master)
$ git status
On branch master
nothing to commit, working tree clean
[email&#160;protected] MINGW64 /d/Codes/Git/test (master)
$ git checkout slave
Switched to branch ‘slave‘
[email&#160;protected] MINGW64 /d/Codes/Git/test (slave)
$ git checkout -b bug001
Switched to a new branch ‘bug001‘
[email&#160;protected] MINGW64 /d/Codes/Git/test (bug001)
$ vi test.txt
[email&#160;protected] MINGW64 /d/Codes/Git/test (bug001)
$ git add test.txt
[email&#160;protected] MINGW64 /d/Codes/Git/test (bug001)
$ git commit -m ‘bug001修复完成‘
[bug001 aab106b] bug001修复完成
1 file changed, 1 deletion(-)
[email&#160;protected] MINGW64 /d/Codes/Git/test (bug001)
$ git checkout slave
Switched to branch ‘master‘
[email&#160;protected] MINGW64 /d/Codes/Git/test (slave)
$ git merge bug001
Merge made by the ‘recursive‘ strategy.
test.txt | 1 -
1 file changed, 1 deletion(-)
[email&#160;protected] MINGW64 /d/Codes/Git/test (slave)
$ git branch -d bug001
Deleted branch bug001 (was aab106b).
[email&#160;protected] MINGW64 /d/Codes/Git/test (slave)
$ git checkout master
Switched to branch ‘master‘
[email&#160;protected] MINGW64 /d/Codes/Git/test (master)
$ git stash list
[email&#160;protected]{0}: WIP on master: cabeb0f 禁用快速合并
[email&#160;protected] MINGW64 /d/Codes/Git/test (master)
$ git stash pop
gOn branch slave
Changes not staged for commit:
(use "git add ..." to update what will be committed)
(use "git checkout -- ..." to discard changes in working directory)
modified: test.txt
no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/[email&#160;protected]{0} (8fe9c203f75afc7929433faabc52e02a6d555ff4)
[email&#160;protected] MINGW64 /d/Codes/Git/test (master)
$ git status
On branch slave
Changes not staged for commit:
(use "git add ..." to update what will be committed)
(use "git checkout -- ..." 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 分支名称


推荐阅读
  • 开源Keras Faster RCNN模型介绍及代码结构解析
    本文介绍了开源Keras Faster RCNN模型的环境需求和代码结构,包括FasterRCNN源码解析、RPN与classifier定义、data_generators.py文件的功能以及损失计算。同时提供了该模型的开源地址和安装所需的库。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • python3 nmap函数简介及使用方法
    本文介绍了python3 nmap函数的简介及使用方法,python-nmap是一个使用nmap进行端口扫描的python库,它可以生成nmap扫描报告,并帮助系统管理员进行自动化扫描任务和生成报告。同时,它也支持nmap脚本输出。文章详细介绍了python-nmap的几个py文件的功能和用途,包括__init__.py、nmap.py和test.py。__init__.py主要导入基本信息,nmap.py用于调用nmap的功能进行扫描,test.py用于测试是否可以利用nmap的扫描功能。 ... [详细]
  • 我无法续订几天前过期的RHELDeveloper帐户订阅。我执行了以下步骤,但是,订 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • linux qt打开常用文件格式,设置Linux Qt文件默认打开方式为QtCreator
    Linux自定义文件打开方式也可参照文本抱歉,本文前段时间写的ubuntu下的Qt工程文件默认打开方式是不好用的,因为其他的文本文件也会受到影响,强迫症患者,每次打开Qt工程都是先 ... [详细]
  • systemd-nspawn可以创建最轻量级的容器(ns的意思就是namespace),本文的实验平台是Ubuntu16.04,x86_64机器。本文的目的是:在Ubuntu中用syst ... [详细]
author-avatar
手机用户2602928363_688
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有