git
参考
https://www.runoob.com/git/git-tutorial.html
https://gitee.com/all-about-git
https://oschina.gitee.io/learn-git-branching/?demo
https://www.bilibili.com/video/BV1Jx411L7VE?spm_id_from=333.999.0.0
https://docs.github.com/cn/get-started
1. shell/bash
bash是shell的一种,用于将命令行语言翻译成机器语言,使其能被计算机内核执行
2. git
分布式版本控制系统、内容管理系统、工作管理系统
仓库
.git目录下内的所有文件
tag
发布版本时,为commit 打上一个标签
分支
解决正在开发的版本于上线版本稳定性冲突的问题
分支本质上一个索引,可以任意回退修正
分支流程:完成开发–发布稳定版本–添加新功能新建一个分支,在分支上开发新功能–完成后合并到主分支
pull同步
最好在每次可开发任务前进行同步操作,
注意git pull之前本地所处的分支名,是否与将要pull的分支名对应
push推送
先同步后推送
不同步强制推送,这样会覆盖掉-f
2.1 git 工作流
工作区–add–>缓存区–commit–>HEAD–remote–>远程仓库
工作区:实际项目文件
缓存区:保存临时的改动 .git/index文件
版本库(本地仓库):指向最后一次提交的结果 .git目录
HEAD是指向版本的一个‘游标’缓存区和版本库被叫做对象库
远程仓库(两种协议)
https协议:https://github.com/user-name/repo.git
ssh协议:git@github.com:user-name/repo.git (这协议要提前配置公钥和私钥)fetch 表示从远程同步的
push 表示推送到远程仓库远程仓库的名称和地址可以不同,git命令(bash)操作的是远程地址(路径)
git remote 操作的是与远程仓库的关联功能,直接对远程仓库操作需要在web端执行
-
1. 新创建文件:untrack状态
-
2.
git add
将文件添加到缓存区的同时,修改的文件内容被写入到对象库中的一个新的对象中,该对象的ID被记录在缓存区的文件索引中
git add
之后,git comiit
之前对文件进行修改
修改后,重新
git add
则最终缓存区存在的是二次修改后的文件
- 3.
git commit
提交到本地仓库,不是远程仓库,此时git status
为空
git commit
多行注释https://gitee.com/help/articles/4231#article-header4
- 4.
git remote
/git clone
- 本地init ,远程创建,需要 git remote add 手动关联
- 远程创建,git clone,自动关联,默认别名是origin
-
5.
git pull
/git push
远程仓库管理 -
6.
git rebase
https://www.bilibili.com/video/BV13k4y1m7QJ?spm_id_from=333.337.search-card.all.click
- 7. pull request
https://www.bilibili.com/video/BV1ei4y1s7pU?spm_id_from=333.337.search-card.all.click
https://www.bilibili.com/video/BV1xY4y1h7eV?spm_id_from=333.337.search-card.all.click
2.1.1 顺序工作机制
创建 (状态??)-- add 到缓存区 (状态A(绿))-- commit到本地仓库 – git push到远程仓库
(前提没有经过commit) ;add到缓存区 但是没有commit 到本地库 进行了修改,(-- 状态 AM(红)) – add (状态A绿)-- commit 到本地仓库(不显示状态)
(前提经过了commit)-- 修改文件(状态 空M(红))-- add (状态M(绿))add 但是没有commit 进行了修改 (状态M(绿)M(红))-- 重新add (状态M(绿))+commit
add了也commit了(不显示状态)
2.1.2 版本回退机制
git reset [--soft | --mixed | --hard] [HEAD] [file]
- 单个文件中间过程回退
修改文件 – add – 没有commit
方法1:要么重新修改,再重新add
方法2:要么回退版本git reset file
命令,本来是已经add了 经过reset
将缓存区的文件退回到与上一次commit后一致的内容,但是工作区已做的修改不变,相当于,修改了但是还没有add的状态
git reset HEAD^ file
回到指定版本的未add(工作区所有修改仍然存在)的状态
--mixed
回退版本
上面是
git reset --mixed file
中间退回单个文件
已经commit 提交了,再执行git reset file
不起作用
git reset HEAD^
直接回退版本,当前工作区的所有改变依然不变,但是变成了指定版本下的 还没有add的状态
- 单个文件(版本)下的回退
git checkout HEAD^ -- file
回退到某个版本下的该文件内容,工作区的修改内容已经改变(变成指定版本的内容),且已经add到缓存区,但是没有commit
- 只回退commit ,工作区和缓存区更改的内容不变
git reset --soft HEAD^
从已commit 变成未commit的状态,此时git diff
没有,git diff --cached/--staged
有显示
--soft
后再次git reset [file]
就从已add状态变成未add状态不管是
--soft
回退到之前的那个版本,当前的工作区修改的内容不变,只是缓存区回退到指定的版本,即已经add(git diff包括指定版本和当前修改的版本),但是还没有commit
这个是有commit 会生成新的log表示,如果使用–amend 会合并到指定版本,而不是最近的版本
git reset --soft
不能作用于单个文件
- commit 单文件回退
git reset HEAD [file]
# 回退指定文件的版本
- 直接回退之间的版本(本地仓库之前的已经commit的版本)
--hard
撤销工作区所有未提交的内容,缓存区与工作区都回到上一个版本
git reset --hard HEAD
git reset --hard~2
# 会退到倒数第二个版本
git reset --hard 版本号
# 回退到指定版本号
git reset --hard origin/master
将本地的状态回退到和远程一样
git reflog
# 查看未来的版本号(只记录版本库的信息,但是不记录单个文件的变更信息)–hard 撤销工作区所有未提交的修改内容,将缓存区与工作区都回到上一个版本,并删除之前的所有信息提交
git reset --hard
不能作用于单个文件
- add+commit 但是不增加log记录
git add file
git commit --amend --no-edit
- 回退到远程仓库的对应版本
git reset --hard origin/master
# 注意回退的分支
2.2 git命令
# 全局配置用户信息 保存在...
git config --global user.name user_name
git config --global user.emal user@email.com
# 配置当前项目的信息 保存在项目目录的.git/config文件中
git config user.name user_name
git config user.emal user@email.com
git config -e # 针对当前仓库
git config -e --global # 针对系统上所有仓库
# git config 是配置基本信息
# https://blog.csdn.net/weixin_44441131/article/details/119993685
# 最好是先初始化再配置信息
git init 初始化一个本地空仓库(也可以直接再远程先建立一个仓库 再git clone到本地,避免初始化)
# 将文件添加到缓存区
git add
git add. # 将当前目录下的所有文件添加到缓存区
git add *
# 查看项目当前状态
# 结合git diff 分析
git status
git status -s #获得简短输出
# AM 表示文件在添加到缓存区后又又更改
# A 表示已添加到缓存区
# ? 表示未进行add 操作 新创建的文件
# 空M(红) 表示已经add过的文件,进行了修改
# M(绿) 表示上面修改后在,再次add的后的状态
# M(绿)M(红) 两个标记表示:缓存区的状态(绿表示修改了又add了);(第二个标记是)工作区状态(红表示修改了 但是还没有add)。如果最红又add了 又变成了一个M(绿) 切没有空格
#
# 提交记录,相当于快照
# 具体的,是将当前版本于上一版的差异打包成一个提交记录
# 保存提交历史
# 将缓存区内容添加到本地仓库(版本库)
git commit [file]... -m [message] # 只允许一行message
# 多行message
git commit # 跳到文本编辑器进行多行注释
# 当修改文件 不想通过git add中间步骤的时候,可以使用-am 跳过-缓存区直接到达版本库(本地仓库)
git commit [file]... -am [message]
# 不更改当前的版本库log
git add file
git commit --amend --no-edit # no-edit 不改变之前版本库commit 时的message(别轻易使用)
# 提交日志
git log
git log --oneline # 简单现实记录
git log --graph # 以图的形式查看分支结构
# 查看修改前后的不同
# 查看的是缓存区和当前工作区的差异,(每个区都有一个备份文件感觉)
# 现实已写入缓存区和已经被修改但是还没有被写入缓存区的区别
git diff [file] # 尚未缓存的修改,查看add前后的改动
git diff --cached [file] / git diff --staged [file] # 查看已缓存的改动 先add 然后查看add区缓存区add前后的改动,查看的是缓存区commit前后的改动
git diff HEAD # 查看已缓存和未缓存的所有改动
git diff HEAD -- file # 查看工作区与版本库里边的差别
# !!! git remote 的操作只是与远程服务器的关联功能有关,完全创建和删除远程仓库还需要手动在web上进行操作!!!
#显示所有远程仓库
git remote -v
# 显示某个指定仓库的信息
git remote show [remote]
# 如果还没有克隆现有仓库,并想要将本地仓库连接到某个远程服务器,
git remote add origin <server(两种协议)> # origin 为远程仓库的别名,可以随便修改,但是不能与现有仓库名冲突,<server>遵循常规的协议
# 删除远程仓库(删除的是本地与远程仓库的关联)
git remote rm [remote name]
# 远程仓库重命名,重命名只会更改本地的关联名字
git remote rename old_name new_name
# localremotename(origin) 表示远程仓库(的本地别名)
# master 是分支名,可以是其他分支
# 注意pull 前本地所处的分支名
git pull localremotename(origin) master # 远程分支与当前本地所处分支合并时
# 拉取远程分支,并将其与本地分支合并
git pull origin remotebranch_name:localbranch_name
# 推送
# origin为远程仓库的本地别名,与远程仓库进行关联
# master 要推送的分支
git push loaclremotename(origin) master # 本地分支名与远程分支名相同的时候
git push localremotename(origin) localmaster:master # 本地分支名:远程分支名
git push loaclremotename(origin) master -f # 强制推送,会覆盖远程文件 等价于 git push --force origin master
# 删除远程仓库分支???
git push origin --delete master
git push -u origin master ???
# 版本回退(见上面的版本回退机制)
# 默认--mixed 可以不带参数,用于重置缓存区的文件与上一次的提交(commit)保持一致,工具区的修改保持不变
git reset [--soft | --mixed | --hard] [HEAD] [file]
# 删除仓库
git remote rm origin
rm -rf .git
rm -r ../dir
删除远程仓库
# 创建分支
git branch name
# 显示所有分支
git branch
# 删除分支,必须是在master分支上进行修改
git branch -d branch_name
# 切换分支
git checkout branch_name
git checkout -b branch_name # 第二种方式切换分支
# switch 同样能切换分支
git switch branch
# branch 推送到远程仓库
# version 1
git push origin branch_name -f #强制
# version 2
git push origin remotebranch:localbranch
# 分支合并,手动处理冲突
git merge dev # 在master主分支下,有重复然后手动修改
git merge dev--no-ff # merge后会重新产生一个新的commit https://blog.csdn.net/DoubleInjured/article/details/122555915
# 将master 合并到dev上也是可以的
git merge master # 先切换到master分支上
# 删除文件
git rm file
git commit -m message
# 如果是误删除,利用checkout进行找回
git checkout -- file
# 临时修改bug
git stash # 当前状态 隐藏
git stash pop # 返回到当前的隐藏的内容,同时把原有的stash内容进行了删除,等价于git stash apply + git stash drop
# 查看stash 列表
git stash llist
# 恢复指定的stash
git stash apply [指定的stash标签]
# 创建一个Bug 分支,然后merge到master
# 同步所有的Bug修改
# 注意只更新bug的时候,最好不要有对当前分支的冲突,不然还要手动更改
# https://www.liaoxuefeng.com/wiki/896043488029600/900388704535136
git cherrt-pick [bug修改特定分支标签] # 复制修改的bug提交所做的修改,而不是把整个修改完的分支合并到当前分支上,整个命令会自动给dev做一个提交,然后
# 打标签
git tag -a version [-m 'message'] [HEAD]
# 文件重命名
git mv old_file new_file # 自动add 可直接commit
2.2 git push/pull
https://segmentfault.com/a/1190000002783245
同时关联多个仓库
https://www.cnblogs.com/szrs/p/15315325.html
利用仓库别名的方式进行管理
git remote add name1 <server1>
git remote add name <server2>
2.3 冲突管理
merge 没有冲突时,自动commit (git status 没有显示)
多分支冲突(分支上有为提交的内容时,切换分支)
https://blog.csdn.net/w522301629/article/details/81331273
2.4 git使用错误
不git clone下 本地关联远程仓库时
先在github/gitee 上创建一个仓库,然后利用
git remote add
进行关联
仓库名字要一致
gitee无法提交–邮箱隐私权限
https://blog.csdn.net/w_monster/article/details/119816300
git push 失败
https://blog.csdn.net/qq_45893999/article/details/106273214
https://blog.csdn.net/weixin_44321080/article/details/109549835
remote : Access denied
https://blog.csdn.net/u012451819/article/details/107543341
每次都要输入密码
https://blog.csdn.net/weixin_45646026/article/details/122068279
修改密码
https://blog.csdn.net/vop444/article/details/104244642
主动删除文件的步骤
git add -A # git add -u
git commit -m 'update deleted files'
git push origin master
https://blog.csdn.net/sinat_41667855/article/details/118548394
待整理版本
工作位置
工作区域(工作目录):存放项目的地方
暂存区:存在改动的地方
仓库:存放所有版本的位置
工作流程
在工作目录中添加、修改文件
将需要进行版本管理的文件放入暂存区域
将暂存区域的文件提交到Git仓库
git管理文件的状态
modified 已修改
staged 已暂存
committed 已提交
#配置ID
git config --global user.name "xxxx" #用于的名字
git config --global user.email "xxxx@xx.com" #用户的邮箱
#初始化
git init #初始化一个空的仓库
#添加到暂存区
#先建立一个read.txt/不知道为什么.md文件不行
git add readme.txt
git add . #添加所有的文件
#将暂存区的文件提交到仓库,并添加说明
git commit -m "message:this is first change"
#查看状态
git status
#处于哪个分支,从上次到目前为止有无改动的文件存在(未提交的文件);为跟踪的文件(即未加入到暂存区域)
#查看历史记录
# 会显示commit id
git log
#查看不同
git diff
#撤销操作
# add 但是没有commit 用restore/restore --stage
# add 且commit 用reset
# https://blog.csdn.net/qq_38158479/article/details/106972138
git restore # 未在缓存区(未commit),从工作区退回到未修改之前
git restore --stage # 已在缓存区(已经commit),从缓存区退回,保留修改
#删除文件
git rm file_name
#注意git checkout命令
#返回单个文件的状态
git checkout ID -- file_name
#创建分支
git branch dev(file_name)
#查看分支
git branch
#切换分支
git checkout v
#切换回主分支
git chekout master
#删除分支
git branch -d dev
#建立分支的同时直接切换到分支
git checkout -b dev
#然后所有的修改都是在分职场
#融合所有的分支
#在log中默认情况下是不保留信息的,--no-ff就是可以显示信息
git merge --no-ff -m "keep merge info" dev
#查看记录
git log --oneline --graph
#对于上述分支冲突需要进行手动修改,再add和commit
#多分支,和临时修改
git checkout dev
pass #modified my file
#此时没有被add,需要干别的事情,那么就要
git stash #放到别的地方
git checkout -b 'other-branch'
#此时来到了别的branch中
#然后再把other的文件merge到master主分支之中
git checkout master #切换回主分支
git merge --no-ff -m "merge other" other #将other的工作合并到主分支
#注意这个时候要手动消除一下冲突
git add file_name
git commit -m "solve the conflict between other and master"
#现在要继续临时修改之前的任务
#可以删除other分支,git branch -d other,有的时候需要强行删除
#切换我的分支
git checkout dev
#拿回临时修改
git stash pop #返回到临时修改的部分
注意再没有commit的时候,对一个文件修改后,add了,则变成了绿modified的状态,但是此时没有commit,然后对文件又进行了修改,但是没有add,则此时有了一个红色modified的状态,也就是此时有两个modified的状态,一个红,一个绿
github
如上创建本地库
开始创建远程库,本地上传远程
new repository
git remote add origin https://xxx #相当于对地址起别名
git push origin master #推送分支
本地克隆远程
本地新建一个目录
clone/download 复制地址
git clone http;//XX,#完成克隆
==============================================
git config --global user.name ‘real name’
git config --global user.emal ‘real email’
git init
cread_py.py
create_readme.txt
git add certain_file
git add *
git commit -m ‘description’
git status
修改
git status
提交或恢复(git checkout 从暂存区恢复到工作区,因为写错了)
git add*
git commit -m ‘description’
git diff 查看工作区和暂存区的区别
clear 清屏
git log 提交的版本
恢复文件到某一个指定的版本
git reset --haard 加版本号
推送到远程仓库
让github给电脑授权
需要ssh密匙
生成ssh 密匙
ssh-keygen -t rsa -C ‘email’
我的电脑,用户\mingzi1、.ssh点文件、.pub文件
配置密匙
seting
新增密匙-ok
git romte add origin 仓库地址
git push -u origin master
用户名、密码
git add
git commit -m
git status
git push
新文件夹
git clone 地址
========
自己文件夹,自己修改一下,git push
新同学还没有更新
新同学要更新
git pull