git相关

一、生成ssh密钥

Git ssh key 作用与配置
  • ssh指secure shell(一种安全的网络协议),git使用这种协议进行远程加密登录。
  • ssh登录安全性由非对称加密保证,产生密钥时,一次产生两个密钥,一个公钥,一个私钥,在git中一般分别命名为id_rsa.pub, id_rsa。
  • ssh方式单独使用非对称的秘钥进行认证和加密传输,和账号密码分离开来,不需要账号也可以访问repo。
  • git基于多种传输协议,其中最常用的就是https和ssh。都是为了数据传输安全,那么设置ssh密钥的目的是为了节省输入用户名密码的过程,同时保证传输安全。并不是必须设置。
// 在命令行键入,然后一路回车即可
ssh-keygen -t rsa -C "li_zhicong@dahuatech.com"
// 然后公钥保存在id_rsa.pub文件里面,复制之后放置在远程服务,比如gitlab即可

二、git config 配置

  • git config -l:查看所有的git配置信息,从上到下依次是系统级别、用户级别、仓库级别

  • git config --local -l:查看仓库配置,但是必须在具体的项目目录下

  • git config --global -l:查看用户配置,主要是git配置的用户名和邮箱

  • git config --system -l:查看系统配置

    // 下面两个设置了之后,在提交代码时,才会有对应提交者的名字,否则是默认的名字,无法区分是谁提交的代码
    
    // 设置用户名(这个用户名要设置为账号的用户名,而且须一致,比如gitee或者gitlab的账号名)
    git config --global user.name "lzc"
    // 设置邮箱
    git config --global user.email "V_li_zhicong@dahuatech.com"
    // 查看用户名
    git config user.name
    // 查看用户名
    git config user.email
    

三、git的三大区

  • 工作区(Working Directory)
    // 是直接编辑的地方,肉眼可见,直接操作
    
  • 暂存区(Stage 或 Index)
    // 数据暂时存放的区域,这里存储的是index文件,是对提交的各文件的引用,而非文件本身
    
  • 版本库(commit History)
    // 存放已经提交的数据,push 的时候,就是把这个区的数据 push 到远程git仓库
    

四、常用git命令

1、拉取代码
// 从远程拉取master
git clone ssh地址/https地址 

// 从远程的某个分支拉取代码
git clone ssh地址/https地址 -b 远程分支名
2、代码提交
// 切换分支
git checkout 分支名

// 查看分支状态,不显示被commit的文件
git status

// 提交所有新增、修改的代码到暂存区
git add .

// 提交暂存区的代码到版本库
git commit -m "提交的备注"

// 拉取远程分支的代码进行更新
git pull

// 提交版本库代码到远程
git push
git push origin 远程分支名
3、五种 git add 的区别
// 提交具体文件
git add 具体文件名

// 提交某个文件夹以及里面的所有文件,如src文件夹
git add src/

// 提交工作区的新增、修改的代码到暂存区(一般用这个)
git add .

// 提交工作区的新增、删除的代码到暂存区
git add -u

// 提交工作区的新增、修改、删除的代码到暂存区
git add -A
4、创建分支
// 创建分支
git branch 分支名

// 切换分支
git checkout 分支名

// 创建并切换到该分支
git checkout -b 分支名
5、查看分支
// 查看本地分支
git branch
// 查看远程分支
git branch -r
// 查看本地和远程分支
git branch -a
6、删除分支
// 删除本地分支
git branch -d 分支名

// 删除远程分支
git push origin --delete 远程分支名
7、代码对比
// 1、工作区 vs 暂存区
git diff

// 2、工作区 vs 版本库
git diff head

// 2、暂存区 vs 版本库
git diff --cached

// 1.刚开始,什么操作都没有,三个区的数据是一致的,执行 git diff 命令都为空
// 2.编辑文件增加代码,现在工作区内容发生变化,暂存区和版本库内容不变。
// 3.执行git add 操作后,修改同步到暂存区,现在工作区和暂存区数据一致。
// 4.执行git commit 操作后,修改已经同步到版本库,三区数据再次保持一致。
8、查看版本库版本、暂存区记录
// 查看当前分支的commit记录,不包含其祖先的,后面加杠和数字,表示只查看几条记录
git reflog
git reflog -3
// 查看当前分支和其祖先的commit记录,后面加杠和数字,表示只查看几条记录
git log
git log -3

// 查看暂存区的文件目录(这个一般太多了)
git ls-files -s
// 查看暂存区的修改过的文件目录(工作区相对于暂存区的修改的文件)
git ls-files -m
// 查看暂存区某个文件的内容(hash值最少取4位)
git cat-file -p <hash>或者git show <hash>
9、分支关联
// 把创建的本地分支推送到远程并且进行关联(设置上游)
git push --set-upstream origin 远程分支名

// 建立本地分支和已有的远程分支的联系
git branch --set-upstream-to=origin/远程分支名 本地分支名
// 如果本地没有这个分支,可以新建并关联
git checkout -b 本地分支名 --track origin/远程分支名
10、暂存工作区的代码
// 当在某个分支开发代码时,又接到要去紧急修改的需求时,因为当前分支的功能还没有开发完毕,所以也不适合去commit,这是可以在当前分支执行 git stash 将当前工作区的代码推入一个栈中进行保存,然后切换分支,在另外一个分支处理完事务之后,可以再切换到之前的那个分支,进行git stash pop操作,将栈里面的内容推到当前工作区,之前在分支1时,假如还git add .到暂存区了,这个时候git stash pop后,分支1的暂存区是没有内容的。

当前在分支1
git stash
git checkout 分支2
在分支2处理事务完毕
git checkout 分支1
git stash pop
11、git commit --amend -m “提交备注” ===>这不是再一次提交么,有什么区别?
// 1、当commit代码后,发现代码有错误时,这时可以git reset --hard commit_xid,但是这样的话,一般改动太大了,直接恢复到上一次commit版本了,不建议;这里可以在工作区继续修改,再add,在commit时,选择该命令,这个会帮我们将暂存区的内容和版本库做一个合并,然后替换前面那个commit,之前commit的信息还是保留的。

// 2、实际测试发现,如果是第二次继续修改了代码,是以修改后的为准,新增的代码自然新增了。
12、撤销代码修改

a、只是在工作区修改了,还未提交的暂存区时(在工作区) ===>已测试

// 下面的撤销的代码都是来自暂存区的代码覆盖,包括不提示的也是来自暂存区

// 放弃某个文件的修改
git checkout -- 文件全名

// 放弃某个文件的修改,这种会有提示: Updated 1 path from the index
git checkout 文件全名

// 放弃所有文件的修改,这种也会有提示: Updated 1 path from the index
git checkout .

// 放弃某个文件的修改
git restore -- 文件全名
git restore 文件全名

// 放弃所有文件的修改
git restore .

b、已经提交的暂存区了(在暂存区) ===>已测试

// 以下只是将暂存区的代码恢复到 git add . 之前了,要想工作区的代码也恢复到修改之前,需要再进行a里面的操作

// 放弃修改某个文件
git reset HEAD 文件全名
// 放弃修改所有文件
git reset HEAD .
git reset

c、已经提交的版本库了(在版本库) ===>已测试

// 比如最近有A、B两次commit记录,此时代码在B commit处,可能还存在commit B之后又修改的代码。以下区别就在于hard、mixed、soft的不同上,只写git rest时,默认是--mixed(最好还是使用带@符号或者具体版本号的命令,不要使用~波浪号的命令,后者频繁出问题,不知道定到那个版本库版本去了)

// 如果想将版本库、暂存区、工作区都从B版本直接切到A版本  ===>已测试
git reset --hard A的版本号
git reset --hard HEAD@{1} // HEAD@{0}在B的版本号处
git reset --hard HEAD~1 // HEAD~0在B的版本号处(不推荐,频繁出问题)
git reset --hard HEAD^  // 这种我试着是会提示More?,好像达不到效果

// 如果只想将版本库和暂存区撤销至A,而工作区维持在B(在commit B之后,可能还存在修改的代码,这时工作区的修改代码不会改变)  ===>已测试
git reset --mixed A的版本号
git reset --mixed HEAD@{1}
git reset --mixed HEAD~1 // (不推荐,频繁出问题)
git reset --mixed HEAD^  // 这种我试着是会提示More?,好像达不到效果
    
// 如果只想将版本库撤销至A,而暂存区和工作区都维持在B(在commit B之后,可能还存在修改的代码,且git add .了,这时暂存区和工作区的修改代码都不会改变)  ===>已测试
git reset --soft A的版本号
git reset --soft HEAD@{1}
git reset --soft HEAD~1 // (不推荐,频繁出问题)
git reset --soft HEAD^  // 这种我试着是会提示More?,好像达不到效果
    
// 功能类似于git reset --hard 版本号(不过这里的版本号是远程分支最新的)  ===>已测试
git fetch --all // (测试时发现没用)
git reset --hard origin/远程分支名  // (可以)
13、代码合并
git merge origin/远程分支名
git merge 远程分支名
14、拉取代码
git pull origin 远程分支名
15、推送代码
git push origin 远程分支名

// 本地和远程是同名分支时
git push
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值