验证是否安装正确:
windows/mac: 在命令行输入:git --version
结果可以看到当前的git版本:
C:\Users\gao>git --version
git version 2.40.1.windows.1
首先需要一个github或者gitee的账号,去对应平台申请账号,申请之后为了本地可以与git进行代码管理即上传下载到gitee或者github,需要配置相应的账号信息。
windows 鼠标右键,选择 git bash here
在git bash 中进行对应的配置
配置用户名:git config --global user.name "your name"
配置邮箱:git config --global user.email "your email"
验证配置结果:git config --global --list
或者 git config --global -l
输入命令: ssh-keygen -t rsa -C "[email protected]"
连敲三次回车,会在对应目录生成公钥和私钥
git bash 中输入 ssh-keygen -t rsa -C "[email protected]"
,结果如下
$ ssh-keygen -t rsa -C "[email protected]"
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/19857/.ssh/id_rsa): ## 公钥私钥的路径
Created directory '/c/Users/19857/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
...
The key's randomart image is:
....
进入对应路径可以看到 公钥、私钥
git 输入即打印,# 后为注释
$ cd /c/Users/19857/.ssh/ # 进入对应路径
$ ls # ls展示路径下的文件
id_rsa id_rsa.pub
其中 id_rsa 为私钥,id_rsa.pub为公钥
在想要将本地的代码push到远程的仓库前还将1.2 环境生成的公钥配置到 gitee或者github,以gitee为例
gitbash 首先查看是否已有公钥私钥
$ cd ~/.ssh
$ ls
id_rsa id_rsa.pub # 说明已有公钥,id_rsa为私钥,id_rsa.pub为公钥
如果没有需要输入git的项目目录输入 ssh-keygen -t rsa -C "[email protected]"生成
打开公钥文件,复制公钥
登录gitee,进行配置操作
新建公钥 保存复制的公钥即可
对于python 而言常用的编辑器是git,可以在pycharm中配置git
在pycharm 中 点击 左上角 file->setting->Version Control->git
可以看到 中上位置 Path to Git excutable 自动检测出了 git所在的安装路径
点击 test 按钮 可以 可以看到git 的版本则说明,pycharm正常使用git
git提交分为三个区: 工作区、临时区(stage)、仓库(master:主分支)
本地的目录为工作区,在本地可以增删改查自己的文件,然后将修改后的文件添加add到临时区,最后commit到仓库中。
[工作区:test.txt]—git add
—>[临时区stage] —git commit
—>[仓库master]
在文件根目录下输入命令(鼠标右键git bash here) :git init
输入命令后会生成一个.git的隐藏文件
提交到仓库
git add test.txt
git commit -m '本次提交的记录,提示信息'
查看状态:git status
查看改动:git diff
撤销修改:git checkout -- xxx
查看日志:git log
有时候我们在自己本地的工作区对代码进行了修改后发现存在一定的问题,需要进行撤销,分为以下三种情况
1.首先创建gitDemo文件夹
gitbash中输入 git init
创建git本地仓库
创建demo.py文件并输入以下内容(可任意输入)
print("hello world!")
2.接着在git bash(鼠标右键 git bash here)中 添加并提交代码
$ git add demo.py
$ git commit -m "新建demo.py 文件"
[master dc4fba4] 新建demo.py 文件
1 file changed, 1 insertion(+)
create mode 100644 demo.py
3.修改demo.py 如下:
print("hello world!")
print("hello 2323")
git bash 查看
$ git status
On branch master
Changes not staged for commit:
(use "git add ..." to update what will be committed)
(use "git restore ..." to discard changes in working directory)
modified: demo.py
no changes added to commit (use "git add" and/or "git commit -a")
可以看到demo.py 被修改了
$ git diff
diff --git a/demo.py b/demo.py
index e75154b..94ce0f2 100644
--- a/demo.py
+++ b/demo.py
@@ -1 +1,2 @@
-print("hello world")
\ No newline at end of file
+print("hello world")
+print("hello 2323")
\ No newline at end of file
如果输入有误需要 撤销修改
直接git checkout xxx.py
恢复本地文件
$ git checkout demo.py
Updated 1 path from the index
查看demo.py
print("hello world")
可以看到新增的print("hello 2323")
已被删除
此时demo.py 为
print("hello world")
err
git bash的操作:将文件add到了临时区(暂存区)
$ git add demo.py # 这里误将文件添加到了临时区
$ git status # 查看下状态
On branch master
Changes to be committed: # 这里提示可以restore 恢复
(use "git restore --staged ..." to unstage)
modified: demo.py
$ git restore --staged demo.py # 恢复临时区的存储
$ git status # 查看状态
On branch master
Changes not staged for commit:
(use "git add ..." to update what will be committed)
(use "git restore ..." to discard changes in working directory)
modified: demo.py # 还是提示存在修改,因为工作区还是修改后的,如果要撤销需要工作区也撤销
no changes added to commit (use "git add" and/or "git commit -a")
$ git checkout demo.pymo # 工作区撤销
error: pathspec 'demo.pymo' did not match any file(s) known to git
$ git checkout demo.py # 工作区撤销
Updated 1 path from the index
$ git status # 再次查看,已经恢复修改
On branch master
nothing to commit, working tree clean
在最开始的demo.py 中增加一行 error,如下:
print("hello world")
error
git 命令操作:
$ git add demo.py # 将修改后的代码add到了临时区
$ git commit -m 'modify demo.py add line "error"' #将修改的错误代码提交到了仓库
[master b75cebd] modify demo.py add line "error"
1 file changed, 2 insertions(+), 1 deletion(-)
$ git log # 查看giy日志
commit b75cebdf2d829d0606bfbc158273871e73d44e75 (HEAD -> master)
Author: sailor823 <[email protected]>
Date: Mon May 22 22:27:41 2023 +0800
modify demo.py add line "error" # 这里可以看到错误的修改记录,需要回退到前一个记录
commit 908734efceaeb88b0c86579937689ea204751192
Author: sailor823 <[email protected]>
Date: Sun May 21 22:17:59 2023 +0800
add file demo.py
$ git reset --hard HEAD^ # 回退到上一个版本
HEAD is now at 908734e add file demo.py
$ git log # 再次查看,可以看到只有之前的提交记录
commit 908734efceaeb88b0c86579937689ea204751192 (HEAD -> master)
Author: sailor823 <[email protected]>
Date: Sun May 21 22:17:59 2023 +0800
add file demo.py
查看demo.py 可以发现文件也回到之间没有添加的样子
print("hello world")
撤销回退的三种情况应对方法:
代码仅在本地进行了修改
只需要从仓库checkout 下当前仓库的版本替换即可,git checkout demo.py
代码本地进行修改且add到了临时区
git restore --staged demo.py
git checkout demo.py
代码本地进行了修改,然后add到了临时区,最后进行了代码提交commit
只需要进行git reset 即可回退到上一个版本 git reset --hard HEAD^
PS: ^ 代表回退到上一个版本
git 本身为分布式版本管理工具,在局域网所有成员可以任意进行代码提交修改,但是如果不在局域网内则无法访问,因此可以将本地的仓库保存到一个云端的仓库,所有成员在进行本地仓库存储后可以push到远程的仓库中,其他成员可以直接pull将代码仓库拉取到本地。
PC1 在本地建立仓库后可以将代码push 保存到远程的仓库,其他人则可以通过pull 拉取云端的仓库到本地,然后在本地编辑后也可以修改提交等git操作来管理自己的代码
在本地新建了仓库,需要将本地代码仓库上传的git服务器上
在gitee上新建一个仓库notebooks
建立好了之后会有 展示基本的git 信息,我们是已有仓库,可以看到已有仓库的提示命令
cd existing_git_repo # 进入具体项目地址根目录,我们git init 的地方
git remote add origin https://gitee.com/xxx/notebook.git # 添加远程仓库地址
git push -u origin "master" # 提交代码,-u 并绑定到master主分支,后续可以直接git push
在本地仓库根目录打开gitbash,并绑定远程仓库信息
$ git remote add origin https://gitee.com/username/notebooks.git # 地址为仓库建立后的地址
push代码到远程仓库
$ git push -u origin "master"
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 12 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 4.08 KiB | 4.08 MiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.4]
To https://gitee.com/xxxx/notebooks.git
* [new branch] master -> master
branch 'master' set up to track 'origin/master'.
git remoter add origin xxxx仓库地址
git push
提交代码:注意 第一次 -u origin "master"
是为了将代码绑定到master分支,后续可以直接git push添加远程仓库地址失败
现象:error: remote origin already exists 表示已关联远程仓库,可以删除后重新关联
git remote rm origin
git remote add origin https://gitee.com/xxxxxx.git
git push失败
$ git remote add origin https://gitee.com/sailor823/notebook.git
git push -u origin "master"
error: src refspec master does not match any
error: failed to push some refs to 'https://gitee.com/sailor823/notebook.git'
失败原因: 本地代码未 commit,现在本地 git add.
,git commit -m "xxx"
后在git push
在实际开发中,可能会有多个版本需要维护,会创建多个分支进行维护;或者为了避免其他开发人员的影响,我们可以创建自己的分支进行开发,开发完毕后再合并到主分支中。
在git 中使用类似指针的方法来跟踪保存每个分支,在使用git init
命令进行初始化话后就会创建一个master分支,此时master指针会指向master分支的最新版本,其中HEAD始终指向当前正在使用的分支
当创建一个新的分支dev后,会在原有的基础上,创建一个新的指针dev指向当前的最新版本节点。
如果在创建dev分支后需要切换到dev分支进行开发工作,会将当前分支切换到dev分支上即HEAD指向dev,之后进行的开发工作,版本迭代由dev指针进行版本跟踪,如下图所示
如果需要将分支修改的内容合入,只需要将master指向dev分支的最新节点,再让HEAD执行master即可,如下所示:
创建分支: git branch dev
切换到分支dev: git checkout dev
合并分支:git merge dev
(ps:需要切换回主分支)
删除分支:git branch -d dev
在示例中进行,创建分支后进行文件修改,分支上提交代码,之后合并到主分支上,最后将分支删除
PS E:\code\gitDemo> git init # 初始化文件
Initialized empty Git repository in E:/code/gitDemo/.git/
在文件E:\code\gitDemo路径下添加文件demo.txt
git bash 查看并将文件添加、提交
# ===============1.仓库初始化====================
$ git add . # add所有文件到暂存区
$ git commit -m "master create demo.txt" # master提交到本地仓库
[master (root-commit) 247cd82] master create demo.txt
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 demo.txt
$ echo "master update demo.txt" > demo.txt # master修改demo.txt
$ cat demo.txt # 查看修改的内容
master update demo.txt
$ git add . # 在master分支将修改后的内容add到暂存区
warning: in the working copy of 'demo.txt', LF will be replaced by CRLF the next time Git touches it
$ git commit -m "master update demo.txt" # master提交入库
[master 8cdf0c1] master update demo.txt
1 file changed, 1 insertion(+)
$ git log # 查看日志
commit 8cdf0c100ee90142bc007d1c958733ebe34a945a (HEAD -> master)
Author: sailor823 <[email protected]>
Date: Wed May 31 22:47:57 2023 +0800
master update demo.txt
commit 247cd82e020d605b068dd3a690fec3a4efe8b31b
Author: sailor823 <[email protected]>
Date: Wed May 31 22:46:38 2023 +0800
master create demo.txt
#==================2.创建分支并在分支修改=======================
$ git branch dev # 创建分支dev
$ git branch # 查看所有分支
dev
* master # * 号代表当前使用的分支
$ git checkout dev # 切换分支到dev
Switched to branch 'dev'
$ git branch # 查看是否切换成功
* dev # 当前* 号在dev说明切换成功
master
$ echo "dev update demo.txt">demo.txt # dev修改文件
$ cat demo.txt # 查看修改后的结果
dev update demo.txt
# 在dev分支进行 add、commit
$ git add .
warning: in the working copy of 'demo.txt', LF will be replaced by CRLF the next time Git touches it
$ git commit -m "dev update"
[dev c994a7f] dev update
1 file changed, 1 insertion(+), 1 deletion(-)
# 查看日志
$ git log
commit c994a7f0c619440e4985f65534703049300be711 (HEAD -> dev)
Author: sailor823 <[email protected]>
Date: Wed May 31 22:49:53 2023 +0800
dev update # dev修改的记录
commit 8cdf0c100ee90142bc007d1c958733ebe34a945a (master)
Author: sailor823 <[email protected]>
Date: Wed May 31 22:47:57 2023 +0800
master update demo.txt # master之前的修改
commit 247cd82e020d605b068dd3a690fec3a4efe8b31b
Author: sailor823 <[email protected]>
Date: Wed May 31 22:46:38 2023 +0800
master create demo.txt # master最开始的创建记录
# =========3.切换分支并合并到主分支,删除分支dev=====================
$ git checkout master
Switched to branch 'master'
$ git merge dev # 将dev分支合并到master分支
Updating 8cdf0c1..c994a7f
Fast-forward
demo.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
$ cat demo.txt # 查看合并后的结果
dev update demo.txt # 确实是dev修改的结果
# 删除分支
$ git branch -d dev
Deleted branch dev (was c994a7f).
$ git branch
* master # 可以看到只有一个master分支
gitlab 是一个基于git实现的在线代码仓库软件,提供web可视化管理界面,通常用于企业团队内部协作开发,可以企业内部私有化部署,而github常用于开源项目,也可以建立私有仓库,但要收费,所以一般企业内部使用的是gitlab。
使用gitlab 实现以下基本操作:
环境配置
配置公钥:
找到本地生成的id_rsa.pub(见1.2.2)配置到gitlab中(gitlab->头像->Preferecess-SSH keys),将公钥中的内容复制粘贴过去即可
克隆项目到本地
在gitlab 点击对应的项目,点击进入项目后,点击Clone,保存连接,如:https://gitlab.stuq.ceshiren.com/mayunlong/python_code
在本地PC的git bash中输入
git clone https://gitlab.stuq.ceshiren.com/mayunlong/python_code
就会将代码克隆到本地
创建分支
$ ls # 克隆的时候将整个项目包含路径一起克隆下来了
demo/ DataStructre/ gitDemo/ notebooks/ python_code/
$ cd python_code/ # 进入项目路径
$ ls
allure_video/ interface_video/
allure录播/ pytest_demo/
appium_demo/ pytest_video/
appium_video/ python_demo/
continuous_integreation/ python_programming/
gitlab.txt python_video/
gitlab_pycharm.txt vue_fronted/
hogwarts-aitest-mini-web-ing-v2-master/ web_video/
interface/
$ git branch # 查看分支
* master # 当前只有一个,且当前使用分支是 master(注意*号)
$ git branch sailor # 创建分支dev
$ git branch
* master
sailor # 可以看到分支已创建
$ git checkout sailor # 切换分支
Switched to branch 'sailor'
方法二:
$ git checkout -b test # 创建并切换到test分支
Switched to a new branch 'test'
$ git branch
master
sailor
* test
添加/修改内容
在项目文件下添加一个文件如 testGitLab.txt
$ git status # 查看git状态
On branch sailor
Untracked files:
(use "git add ..." to include in what will be committed)
tetsGitLab.txt # 可以看到我们新建了一个文件,目前还没add到暂存区
nothing added to commit but untracked files present (use "git add" to track)
$ git add . # 将所有文件天际到暂存区
提交内容
$ git commit -m "create testGitLab.txt" # 提交文件到本地仓库
[sailor 0754044] create testGitLab.txt
1 file changed, 1 insertion(+)
create mode 100644 tetsGitLab.txt
second guess 'git checkout ' (default)
$ git push # 提交到远程的服务器
fatal: The current branch test has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin test # 第一次需要设置分支路径
To have this happen automatically for branches without a tracking
upstream, see 'push.autoSetupRemote' in 'git help config'.
$ git push --set-upstream origin test # 我这失败是因为没有push 权限
warning: missing OAuth configuration for gitlab.stuq.ceshiren.com - see https://aka.ms/gcm/gitlab for more information
remote: You are not allowed to push code to this project.
fatal: unable to access 'https://gitlab.stuq.ceshiren.com/mayunlong/python_code.git/': The requested URL returned error: 403
更新本地仓库
$git pull
一般使用Pycharm进行仓库代码开发,pycharm也支持git管理
在用pycharm 打开项目,右下角 分叉树枝 点击后可以进行分支管理,左上角 ↙ 可以pull更新代码到本地,✓用于commit到本地仓库,↗用于push代码到服务器,