(tag:tools-git) git入门使用-笔记

git入门使用-笔记

author:forbit
date:2020/11/06
附加说明:该文章的内容很多来自网络上的资料,这个不用于商业用途,如有侵权等问题请联系本人。

本文的github地址----点击此超链接

CONTENTS:

introduction

本文为本人学习git的笔记和一些问题记录。
如果你和新手,可结合该笔记和其他教程学习一起学习,都看一下。
如果你对git有一定了解会git的基本使用,那么可以使用本文档快速查阅。

下载安装:

官网

win:在官网上下载安装

基本概念

工作区和暂存区

工作区: 就是你电脑看到的目录

暂存区: git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支。

git管理

git管理的“修改” , 而不是文件。

本地使用

git配置:

查看配置信息

git config -l
$ git config --global user.name "your Name"
$ git config --global user.email "your email"

sample:
$ git config --global user.name xaioming
$ git config --global user.email 123@qq.com

初始化git

当你把你的电脑文件设置为仓库时, 需要将其初始化

在git中进入文件目录,使用

git init

即可(初始化)将其设置为仓库

添加与提交

添加

git add  "filename"		//逐个添加文件
git add -A  			//添加当前目录的所有文件
git add .				//添加当前目录中所有文件更改

提交

git commit -m "提交说明"  //提交暂存的文件
//如果没有"提交说明",那么不用-m

git commit filename -m 'commit message'		//添加文件并提交一次

查看状态

这个可以查看当前仓库的状态

git status

查看日志

git log

git log --graph  	 	//用git log --graph命令可以看到分支合并图

为什么会有添加提交呢?

因为.......

删除文件

加入你删除文件

一:你真的要删除

git rm "filename" 		//从改版本中删除

sample:git rm  哈哈.txt

二:不小心删除了, 可以将文件恢复

git checkout -- "filename"  


sample: git checkout -- 哈哈.txt

关于branch

查看当前分支

git branch

创建分支

git branch "branch-name"

git checkout -b branch-name  origin/branch-name    //创建远程origin的dev分支到本地

切换分支

git checkout "branch-name"
git checkout -b branch-name  origin/branch-name    //创建远程origin的dev分支到本地


or

(推荐使用这个)
git switch -c "branch-name"		//切换分支
git switch master 				//直接切换到master分支

合并分支

git merge "branch-name"
//git merge命令用于合并指定分支到当前分支

删除分支

git branch -d "branch-name"


git branch -d "branch-name"   //强制删除分支

解决冲突

你和小明协作开发,大家都有一个分支

你突然发现, 小明他将他自己的分支合并上去了,

你内容可能和他有冲突,那你怎么办?

就是master分支和你的分支有冲突了!

先试下,将分支合并到master,如果有冲突会失败

有冲突的

  • 使用git status 查看哪里有冲突, 然后手动修改(在master分支修改)
  • commit你的master

分支管理策略

合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。

如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。

git merge --no-ff -m "merge with no-ff"  branch-name

bug分支

假如你现在在这个分支工作,但是还没有做完, 所以你还有提交, 同时需要你临时修改个bug(开个bug分支)

Git提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作

git stash

现在,用git status查看工作区,就是干净的, 因此可以放心地创建分支来修复bug。

bug修复完了,接着回到原来的分支干活了

git stash list			//查看stash

恢复原来的工作现场

git stash apply			//恢复stash
git stash drop			//删除stash


git stash pop			//恢复的同时把stash内容也删了

但是还有个问题

你的bug在master修复了,但是你的分支还有这个bug

git专门提供了一个cherry-pick命令,让我们能复制一个特定的提交到当前分支

git cherry-pick "commit的id号"

多人协作

git checkout -b branch-name  origin/branch-name    //创建远程origin的dev分支到本地

你的小伙伴基于你的分支进行开发提交, 然后最新提交和你试图推送的提交有冲突,怎么办?

先用git pull把最新的提交从origin/dev抓下来

如果pull失败,原因是没有指定本地dev分支与远程origin/dev分支的链接,根据提示,设置devorigin/dev的链接

git branch --set-upstream-to=origin/branch-name  branch-name

多人协作的工作模式通常是这样:

  1. 首先,可以试图用git push origin 推送自己的修改;
  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
  3. 如果合并有冲突,则解决冲突,并在本地提交;
  4. 没有冲突或者解决掉冲突后,再用git push origin 推送就能成功!

如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to origin/

关于版本

你commit一次,那么就是一个版本,所以你可以不用总是commit

就像游戏通关, 你commit就是保存游戏, 所以当然是重要的才保存,比如说你打通这一关了,或是这次玩的进度很多了

所以commit时, commit的提交说明就其实蛮有必要的, 不然都不知道,你为什么这次commit了什么, 想回退版本都不明不白的

查看提交日志

(查看你保存的游戏进度)

git log		//这个显示最近到最远提交的日志

git log --pretty=oneline		//这个可以精简显示

版本回退

回到当初的游戏进度

git reset --hard "版本号(commit的id)"

//sample:  git reset --hard 1078sa
//这个版本号(commit的id)可以通过log查看的得知
//这个id很长,只需要填写前面几位就可以了
//head,就像指针,把头指向你当前的

版本前进

如果你回退了版本,但是你想回到之前的版本怎么办? 这时候你就需要的知道你之前的版本号,可是log只会记载你当前和之前的版本

使用命令,记录了你的每一次命令

git reflog

结合远端使用

连接你远端的仓库, 这里以使用SSH方式为例(因为ssh协议比较快)

ssh与https

连接上你远端的git仓库

以GitHub为例

1.生成秘钥

ssh-keygen -t rsa -C "email"

sample: ssh-keygen -t rsa -C  123@qq.com

一路回车,使用默认值即可,可以在用户主目录里找到.ssh目录,里面有id_rsaid_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥

2.在你的GitHub账户中添加公钥

为什么使用SHH key?

因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的.

(GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。)

本地的仓库与远端的连接

sample:  git remote add origin git@github.com:你的账户名/远端仓库名字.git

//远程库的名字就是origin,这是Git默认的叫法,也可以改成别的

提交到远端的库

git push -u origin master   //由于远程库是空的,我们第一次推送master分支时,加上了-u参数

git push origin master   //推送到远端的仓库

git push origin "branch-name"   //可以推送你其他的分支上去

克隆远端的仓库

git clone git@github.com:账户名/远端仓库名字.git

查看远端库的信息

 git remote
 
 git remote -v		//显示更详细的信息

常见问题

错误1

出现错误:Permission denied (public key)

你提交或克隆时出现错误

  • 先测试下和你github账户的连接

    ssh -v git@github.com    //使用这个测试
    
    或(建议用第一个)
    
    ssh -T git@github.com 
    
  • 假如连接失败,那么说明(你的github账户上的秘钥 和 你本地的秘钥内容或秘钥文件位置不符)

    (懒得去找了,直接新建个秘钥吧)

  • 新建秘钥

    cat  路径   //使用这个查看你秘钥的内容,是看公钥的内容
    
  • 最后把新的秘钥放在github上吧,一般没问题了吧.....

错误2

错误提示

fatal: The remote end hung up unexpectedly

可能造成的原因

因为上传代码是中端,导致缓存区堆放有文件,下次上传是缓存区就不够大了,所以可以扩大缓存区和回收垃圾,建议回收垃圾。

解决:

1.缓冲区设置

git config http.postBuffer 524288000

2.垃圾回收修复

git gc --aggressive
posted @ 2021-06-25 16:42  forbit  阅读(54)  评论(0)    收藏  举报