千家信息网

Python全栈开发之Git

发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,No.1 Git特点版本控制:可以解决多人同时开发的代码问题,也可以找回历史代码分布式:Git是一个分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上,首先会有一台计算机充当服务器,这台计算
千家信息网最后更新 2024年09月22日Python全栈开发之Git

No.1 Git

特点

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

安装

sudo apt-get install git -y

No.2 版本创建与回退

使用

创建一个版本库

git init

创建一个版本

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

查看工作区状态

get status

查看版本记录

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

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

# 1.git rm test.txtgit 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,在这个文件中新增加了一行数据,然后提交到版本库中,再进行合并就会出现冲突

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master)$ git checkout -b slaveSwitched to a new branch 'slave'kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (slave)$ cat test.txtmaster:the new codekernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (slave)$ vi test.txtkernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (slave)$ cat test.txtmaster:the new codeslave:the new codekernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (slave)$ git add test.txtkernel@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 masterSwitched to branch 'master'kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master)$ cat test.txtmaster:the new codekernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master)$ vi test.txtkernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master)$ cat test.txtmaster:the new codemaster:the new codekernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master)$ git add test.txtkernel@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 slaveAuto-merging test.txtCONFLICT (content): Merge conflict in test.txtAutomatic merge failed; fix conflicts and then commit the result.# 解决冲突kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master|MERGING)$ cat test.txtmaster:the new code<<<<<<< HEADmaster:the new code=======slave:the new code>>>>>>> slavekernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master|MERGING)$ vi test.txtkernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master|MERGING)$ cat test.txtmaster:the new codeslave:the new codekernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master|MERGING)$ git add test.txtkernel@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.txtkernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (slave)$ cat test1.txtadd new codekernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (slave)$ git add test1.txtkernel@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.txtkernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (slave)$ git checkout masterSwitched to branch 'master'kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master)$ vi test.txtkernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master)$ cat test.txtmaster:the new codeslave:the new codemaster:add new codekernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master)$ git merge slaveMerge made by the 'recursive' strategy. test1.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 test1.txtkernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master)$ git log --pretty=onelinebee1e463867f605f16c3fbad6a50ea36f4e0b20a (HEAD -> master) 合并slave分支5fa46e2ec62346526554b04b62a468afbde0f9ba (slave) 1.5b2524777899baab52783e1b49360fedc1e6a7e50 1.4e46f9b7b5c379238ddca5db70746bc4f9f8c5edc 1.35035bfba43172b02bdbb7447fd9ebb018e6f49f5 1.22ae2bcac4258f41cb1a1e3a3a81a572be80c28f9 1.18d3dee945a68e5996d9c088a9769f43fc5c75228 1.0kernel@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.0kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master)$ git branch -d slaveDeleted branch slave (was 5fa46e2).

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

kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master)$ git checkout -b slaveSwitched to a new branch 'slave'M       test.txtkernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (slave)$ vi test2.txtkernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (slave)$ git add test2.txtkernel@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.txtkernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (slave)$ git checkout masterSwitched to branch 'master'M       test.txtkernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master)$ git merge --no-ff -m '禁用快速合并' slaveMerge made by the 'recursive' strategy. test2.txt | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 test2.txtkernel@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 statusOn branch masterChanges not staged for commit:  (use "git add ..." to update what will be committed)  (use "git checkout -- ..." to discard changes in working directory)        modified:   test.txtno changes added to commit (use "git add" and/or "git commit -a")kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master)$ git stashSaved working directory and index state WIP on master: cabeb0f 禁用快速合并kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master)$ git statusOn branch masternothing to commit, working tree cleankernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master)$ git checkout slaveSwitched to branch 'slave'kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (slave)$ git checkout -b bug001Switched to a new branch 'bug001'kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (bug001)$ vi test.txtkernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (bug001)$ git add test.txtkernel@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 slaveSwitched to branch 'master'kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (slave)$ git merge bug001Merge 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 bug001Deleted branch bug001 (was aab106b).kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (slave)$ git checkout masterSwitched to branch 'master'kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master)$ git stash liststash@{0}: WIP on master: cabeb0f 禁用快速合并kernel@DESKTOP-67P59AO MINGW64 /d/Codes/Git/test (master)$ git stash popgOn branch slaveChanges not staged for commit:  (use "git add ..." to update what will be committed)  (use "git checkout -- ..." to discard changes in working directory)        modified:   test.txtno 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 statusOn branch slaveChanges not staged for commit:  (use "git add ..." to update what will be committed)  (use "git checkout -- ..." to discard changes in working directory)        modified:   test.txtno 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 分支名称

分支 版本 文件 工作 工作区 计算机 代码 指向 存区 一行 就是 数据 冲突 服务 不同 仓库 时候 时间 服务器 机器 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 学生干部网络技术培训 服务器有两个系统怎么快捷切换 上海黑犇互联网科技有限公司 免费vpn服务器工具 开发购物小程序需要服务器吗 海宁滤靠网络技术有限公司 网络安全法制讲座观后感 服务器 445端口 河南安家助拍网络技术有限公司 昆仑的服务器在哪 服务器远程模块 中国电信用的网络技术 填制凭证数据库引擎打不开 魔兽怀旧厄运之槌服务器 安卓带数据库源码下载 国家网络安全宣传周几月几号 如何查询数据库中乱码的数据 中国移动服务器管理地址查询 数据库最常用的是哪个 世界网络安全市场 上海心蕊网络技术有限公司 韶关物流配货软件开发 哪里可以找软件开发 网络安全事业的发展 广播电视网络技术考试 dns服务器配置文件 班会网络安全进校园 软件开发合同逾期违约赔偿标准 sap怎么更改数据库密码 定时关机如何让服务器不生效
0