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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值