精简版Git基础操作(快速上手)


前言

  • Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或大或小的项目。
  • Git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源代码的版本控制软件。
  • Git与常用的版本控制工具CVS、Subversion等不同,它采用了分布式版本库的方式,不用服务器端软件支持,各个客户端都有一个最新版本信息,当服务器故障了,各个客户端都不会受到影响。# 一、pandas是什么?

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

一、初始化

设置用户名

 git config --global user.name "Yaepii Jia"

设置邮箱

git config --global user.email yaepii@126.com

保存用户名和密码

git config --global credential.helper store

查看配置信息

git config -l

–global关键字:全局配置,所有仓库生效

–system关键字:系统配置,对所有用户生效

在这里插入图片描述


二、新建仓库

仓库就是用来存放和管理代码的一个容器,新建仓库就是把一个电脑中的文件夹目录变成git可以管理的仓库就可以了。
方式一:在电脑本地创建一个仓库

git init [仓库名]

在这里插入图片描述
下图中的.git文件记录了仓库的信息,这是一个隐藏文件夹,需要用ls -a命令才能显示,进入到这个目录,可以使用ls -altr命令显示详细信息,当删除.git文件夹,仓库也会被删除。
在这里插入图片描述

方式二:从远程克隆一个已经存在的仓库

git clone <仓库地址>

三、工作区域和文件状态

工作区域分为:

  • 工作区:本地文件夹目录,实际操作的目录
  • 暂存区:保存即将提交到git上的修改内容
  • 本地仓库:存储代码和版本信息

在这里插入图片描述
工作流程一般是:将工作区的文件先添加到暂存区,然后通过提交命令一次性提交到本地仓库。

文件状态:
在这里插入图片描述

四、添加和提交文件

查看当前仓库的状态:

git status

在这里插入图片描述
将文件添加到暂存区,等待提交:

git add <文件名>
git add .		#将所有文件添加到暂存区

在这里插入图片描述
取消暂存(从版本库和暂存区中删除文件,但不在工作区删除文件):

git rm --cached <file_name>

将文件提交到仓库中:

git commit -m "提交信息"

在这里插入图片描述
查看提交记录:

git log
git log --oneline		#查看简洁版提交信息

在这里插入图片描述

五、回退到之前版本

命令:git reset --param <版本id>
三个参数:

  • soft:保留工作区和暂存区所有内容
  • hard:删除工作区和暂存区所有内容
  • mixed:默认,删除暂存区内容,保存工作区内容
git reset HEAD^		##HEAD表示版本的指针,指向当前版本,^表示上一版本

在这里插入图片描述
查看操作的历史记录,可以回退到之前某个版本号:

git reflog

在这里插入图片描述

六、查看文件差异

查看文件在(不同区域、不同版本、不同分支)之间的差异,用得不多,因为以后开发主要是在图形化工具中使用git。

git diff									#比较工作区和暂存区文件的差异(默认)
git diff HEAD								#比较工作区和版本库文件的差异
git diff --cached							#比较暂存区和版本库文件的差异
git diff <版本1的ID> <版本2的ID> [file_name]	#比较两个版本文件的差异
git diff HEAD~n HEAD [file_name]			#比较当前版本和上n个版本文件的差异

在这里插入图片描述

七、从版本库中删除文件

使用这个命令,会将文件从工作区和暂存区同时删除,然后需要再提交一下,更新版本库中内容

git rm <file_name>

如果想只在暂存区删除一个文件,而工作区不删除,可以加上–cached参数

git rm --cached <file_name>

在这里插入图片描述

八、.gitignore忽略文件

在.gitignore文件中添加一些文件或文件夹(比如:日志文件.log、编译中间文件、临时文件等),可以使得在提交时,将.gitignore中的文件被忽略,不提交。
但是当前.gitignore中的文件不能是已经被添加到版本库中的文件,当这些文件发生修改时,git还是会检测到其内容的修改。
匹配规则:从上到下逐行匹配,每一行表示一个忽略模式,官网匹配规则
提示:github上提供了常用语言的忽略文件模板。

九、github远程仓库–SSH配置和克隆仓库

在本地创建一个ssh秘钥:

ssh-keygen -t rsa -C "your_email@example.com" -b 4096
  • -t 指定密钥类型,默认是 rsa ,可以省略。
  • -C 设置注释文字,比如邮箱。
  • -f 指定密钥文件存储文件名,一般默认,让存储到默认路径以及默认文件名
  • -b指定密钥的大小,默认也可以

它会要求输入Enter file in which to save the key (/home/stephenzhou/.ssh/id_rsa)
这里是要求输入秘钥的文件名,我们可以回车使用默认文件名,但当之前已经创建过秘钥文件,应该再自己设置一个,最好不要用默认。
然后会要求你输入密码,这个密码是在提交时输入的,和登录密码不一样,输入完成后会产生两个文件:id_rsa是私匙,id_rsa.pub是公匙,id_rsa不能告诉任何人,只有公钥可以,ssh采用的是非对称加密。
然后再github中,点击个人头像,选择settings,添加ssh公钥,将pub文件的内容复制进来,然后自定义一个名字,点击添加,输入登录密码后就完成了添加。
在这里插入图片描述
在这里插入图片描述
然后在本地端使用git clone命令就可以拷贝某一个项目到本地文件夹下(不需要git init初始化仓库,直接在一个普通文件夹下git clone即可)

git clone git@github.com:xxxxx.git

在这里插入图片描述
本地仓库和远程仓库是两个地方,在本地仓库进行修改后,远程仓库不会同步修改内容,需要一种机制将它们之间关联起来,这里用到两个命令:git pull(拉取:将远程仓库的修改同步到本地)git push(推送:将本地仓库的修改同步到远程仓库)
在这里插入图片描述

cd remote-repo_name
vim hello.txt
git add .
git commit -m "first commit"
git push

在这里插入图片描述

十、关联本地仓库与远程仓库

一般来说当我们在本地仓库写完本地仓库后,在github上创建了一个空的仓库,用以下命令,将他们关联起来:

git remote add <remote_name> <url>

remote_name:远程仓库的别名,一般填origin
url:远程仓库的git链接

当从github上clone下来一个仓库后,就不用上面这行代码了,git自动建立了本地仓库和远程仓库的链接。
查看当前仓库对应的远程仓库的别名和地址:

git remote -v

指定分支的名称为main:

git branch -M main

将本地仓库的main分支和远程仓库的main分支关联起来**(本地仓库提交了文件之后,push提交才能在github上显示出来)**:

git push -u origin main

-u:将本地仓库分支与远程仓库分支一起合并
在这里插入图片描述
从远程仓库拉取修改内容:

git pull <romote_name> <romote_branch>:<local_branch>

删除远程仓库:

git remote rm <remote_name>

十一、分支

分支类似于版本库中的不同版本,可以独立存在和提交,分支可以使得一个项目的各个模块实现独立开发与测试,提高了整体项目的工作效率。
查看当前仓库的所有分支:

git branch

创建一个新的分支:

git branch <branch_name>

切换分支:

git checkout <branch_name>

在这里插入图片描述
但是使用这个命令切换分支可能会存在一些问题:因为checkout不仅可以切换分支,还有恢复文件的功能,当分支名和文件名相同时,就会出现歧义,默认会切换分支。
语义明确的切换分支:

git switch <branch_name>

在这里插入图片描述
切换回main分支,使用ls命令发现,没有dev.txt类型的文件夹,这是因为在dev分支进行了修改还没有合并到main分支中。
在这里插入图片描述
将不同的分支合并到当前的分支中,当前分支为目标分支:

git merge <被合并的分支名>

在这里插入图片描述
合并后会自动进行一次提交,Windows下会使用默认的提交信息,使用以下命令可以修改提交信息,也可以在执行命令时加上-m参数:

git commit --amend

在这里插入图片描述
在命令行中查看分支图:

git log --graph --oneline --decorate --all

在这里插入图片描述
删除已完成合并的分支:

git branch -d <branch_name>

如果这个分支没有被合并,需要用-D参数进行强制删除:

git branch -D <branch_name>

在这里插入图片描述

十二、解决合并冲突

如果两个分支修改了同一个文件的同一行代码,就会发生合并冲突。
创建feat分支,并在feat分支下对main1.txt文件进行修改,然后提交:

git branch feat
git switch feat
vim main1.txt
git commit -am "feat:1"			#加上-a参数可以同时完成暂存和提交两个动作

返回main分支,然后在main分支下对main1.txt文件进行修改,然后提交:

git switch main
vim main1.txt
git commit -am "feat:1"			#加上-a参数可以同时完成暂存和提交两个动作

合并两个分支,提示自动合并失败:

git merge <被合并的分支名>

在这里插入图片描述
可以使用git status查看冲突:
在这里插入图片描述
这时就需要手动修改文件内容,解决冲突,也可以使用以下命令终止合并:

vim main1.txt
git commit =am "merge conflict"		#修改后再次提交
git merge --abort					#终止合并

回退和rebase

rebase中文意思是“变基”,也是用来整合分支的,可以在任意分支上使用rabase命令整合分支,整合完都是一条直线,但顺序会有所不同:

  • 如果在dev分支上使用rebase命令,dev分支的提交会整合到main分支后面
  • 如果在main分支上使用rebase命令,main分支的提交会整合到dev分支后面

恢复已合并的分支:

git checkout -b <branch_name> <branch_id>

在这里插入图片描述
切换到dev分支,执行命令进行rebase合并:

git switch dev
git rebase main

在这里插入图片描述
切换到main分支,执行命令进行rebase合并:

git switch main
git rebase dev

在这里插入图片描述
Merge合并:

  • 优点:不会破坏原分支的提交历史,方便回溯和查看
  • 缺点:会产生额外的提交节点,分支图比较复杂

Rebase合并:

  • 优点:不会新增额外的提交记录,形成线性历史,比较直观和干净
  • 缺点:会改变提交历史,改变了当前分支branch out的节点,避免在共享分支中使用

其他命令

1.打标签

给当前的提交打上标签,通常用于版本发布:

git tag <tag_name>

2.储藏当前工作现场

在开发过程中,在一个分支开发新的功能,还没开发完毕,做到一半时有反馈需要处理紧急bug,但是新功能开发了一半又不想提交,这时就用到了stash命令,储藏当前工作现场:

git stash save “message”将当前工作现场存储到堆栈中
git stash list查看所有stash
git stash pop恢复最近一次stash,并在list中删除这次stash
git stash pop stash@{n}恢复指定的stash,stash@{0}表示最近的stash
git stash apply n恢复指定的stash,但不会再list中删除
git stash drop stash@{n}在list中删除指定的stash
git stash clear删除所有stash

3.git pull 和 git fetch

  • git fetch是将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支中。
  • git pull 则是将远程主机的最新内容拉下来后直接合并,即:git pull = git fetch + git merge,这样可能会产生冲突,需要手动解决。

git fetch用法:

git fetch <romote_name> 				#将某个远程仓库的更新全部取回本地
git fetch <romote_name> <branch_name> 	#将某个远程仓库的某个分支更新取回本地

git pull用法等于:

git fetch <romote_name> <branch_name> 	#将某个远程仓库的某个分支更新取回本地
git merge FETCH_HEAD    				#将拉取下来的最新内容合并到当前所在的分支中

git pull用法:

git pull <romote_name <remote_branch_name>:<local_branch_name>

一般工作流程:

git fetch  							#代码拉取到本地之后
git branch 							#查看分支
git switch <remote_branch_name> 	#切换到远程分支

注意

git add.时出现警告:LF will be replaced by CRLF the next time Git touches it

CR为回车符, LF为换行符。Windows结束一行用CRLF, Mac和Linux用LF。
与core.autocrlf参数有关:
false表示取消自动转换功能。适合纯Windows
true表示提交代码时把CRLF转换成LF,签出时LF转换成CRLF。适合多平台协作
input表示提交时把CRLF转换成LF,检出时不转换。适合纯Linux或Mac

Windows平台下默认设置为true,警告不用管它,这是合理的;Linux平台下把这个参数设置为input即可。
设置方法:

git config --global core.autocrlf false/true/input

总结

推荐这个B站教程,满满干货,视频制作精简且高质量,UP声音好听,没有废话!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值