git命令详细使用和具体步骤

Git概念

Git是一个免费的,开源的分布式版本控制系统,可以快速高效处理小型到大型的项目

git历史

截取百度百科

林纳斯·本纳第克特·托瓦兹(Linus Benedict Torvalds, 1969年~ ),著名的电脑程序员。Linux内核的发明人及该计划的合作者 [1] 。托瓦兹利用个人时间及器材创造出了这套当今全球最流行的操作系统(作业系统)内核之一。现受聘于开放源代码开发实验室(OSDL:Open Source Development Labs, Inc),全力开发Linux内核。

21岁把开源的linux系统创造出来,因为这个天才支持开源,想让跟多的程序源投入,于是linux会进行多人开发和修订,那么就需要版本控制,起初是和BitKeeper合作,因为linux开发人员想方设法利用反编译等工具看源码,而BitKeeper不想开源,从而终止合作

那么天才程序员Linus Benedict Torvalds在一个月就把git的主体功能全部开发完成

什么是版本控制?

版本控制,每一次对项目里面的文件的更新都是项目的一个新版本,把这些版本记录下来,方便回滚,也方面查看版本之间的区别在哪(就是修改了哪里),就是版本控制

为什么要有版本控制?

一个项目,独立开发没问题,可以不需要版本控制,但是这个项目周期长,你可能会忘记以前对某一个点的修改,然后需要重新修改,你会发现很困难,项目一大,很难找到。

​ 公司里面的项目不是独立开发,是团队协作开发,那么每一个人要对自己的代码负责。但是也总是会发生因为代码逻辑或者一些其他问题不过关最后commit到项目中的,测试或者生产环境出现bug,经过单元测试可以定位问题,来后来定位谁写的。还有一种情况程序员不小心乱改,删除了一部分代码并且没有注意到那段代码与其他代码的关连程度,然后commit。还有很多情况,这里不一一举例

​ 版本控制器就带来了便利,因为版本控制可以回到以前某一个commit的节点

版本管理系统的分类

集中化版本管理系统

所有开发机都是客户端,有一个中央服务器,只要中央服务器不挂,那么合作的客户机的指定版本拉取,上传都没有问题,

缺点:已经说过了,中央服务器挂了就不行了

2 版本 存储 与1版本的差异

3 版本 存储 与2版本的差异

分布式版本管理系统

所有的开发机既是服务器,也是客户端,每一台机器都有对历史和最新版本的存储

Git安装

博客搭建那一部分我给了安装步骤链接

博客搭建链接

Git本地结构

分为三个区

本地库:所有的版本

暂存区:打算要提交,但是还未提交的(git commit 到本地库)

工作区:写代码的地方 (git add 到暂存区)

代码托管中心

任务是维护远程库

本地库与远程库的交互方式,分两种:

1)团队内部协作

push clone

2)跨团队协作

push clone fork

托管中心种类

局域网环境下:可以搭建GitLab服务器作为代码托管中心,GitLab可以自己搭建

外网就是:github,gitee

使用

初始化本地仓库

新建一个文件夹

git base here

鼠标右击Options

在里面设置字符集

#查看版本
git --version
#设置签名
git config --global user.name "zgw"
git config --global user.email "2960571343@qq.com"#初始化本地仓库
#会创建一个.git的隐藏文件夹
git init

基本命令

先创建一个待操作的的文件

git add test.txt #把test.txt放到暂存区
git commit -m "这是我新建的一个文档(注释的作用)" [待提交的文件名,可以不写,全部提交] #将暂存区提交到git本地仓库git status  
#nothing to commit, working tree clean,出现这句话,说明暂存区为空的#Untracked files:
#  (use "git add ..." to #include in what will be committed)
#        test2.txt
#说明 test2.txt是新建文件#Changes not staged for commit:
#  (use "git add ..." to #update what will be committed)
#  (use "git restore ..." to #discard changes in working #directory)
#        modified:   test.txt
#说明test.txt被修改#Changes to be committed:
#  (use "git restore --staged ..." to unstage)
#        modified:   test.txt
#        new file:   test2.txt
#说明暂存区有test.txt,test2.txt,可以被提交git log#commit f94dafc9973e1debbbf99d424feab3d027878917 (HEAD -> master)
#Author: NepenthesZGW <2960571342@qq.com>
#Date:   Fri Jun 12 23:10:49 2020 +0800
#
#    这是我第二次提交
#
#commit 4583389f205758e24e3908b1ee92f1f0089b0d02
#Author: NepenthesZGW <2960571342@qq.com>
#Date:   Fri Jun 12 22:53:42 2020 +0800
#
#    这是我第一次提交,提交了test.txt
#
#可以理解为版本索引4583389f205758e24e3908b1ee92f1f0089b0d02唯一的
#key-->value
#key=f94dafc9973e1debbbf99d424feab3d027878917 
#value=这个版本的信息#log产生分屏,B键后退,空格下一页,q键退出#其他日志展示方式
git log --pretty=oneline #按照一行展示
git log --oneline #按照一行展示,更简洁
git reflog #出现的结果与上面一种差不太多
#head@{1} 说明会回退到这个版本需要走一步

前进和回退命令

git reset --hard [key值也叫索引]#$ git reset --hard 4583389
#HEAD is now at 4583389 这是我第一次提交,提交了test.txt
#$ git reflog
#4583389 (HEAD -> master) HEAD@{0}: reset: moving to 4583389
#f94dafc HEAD@{1}: commit: 这是我第二次提交
#4583389 (HEAD -> master) HEAD@{2}: commit (initial): 这是我第一次提交,提交了test.txt#hard参数表示 本地库的指针移动的同时,重置暂存区,重置工作区
重置是重置到那个版本工作区或者暂存区是什么样子#mixed 参数表示 本地库的指针移动的同时,重置暂存区#soft 参数表示 本地库的指针移动,其他两个区不动

比对命令

git diff [文件名]不带文件名就全部比对
#git按行单位管理数据
#是比对工作区与暂存区的差异git diff [索引] [文件名]
#是比对暂存区与本地仓库某一个版本的差异
注意

git命令必须在本地仓库目录下

分支

版本控制过程中,使用多条线同时推进多个任务,这里的多条线就是多个分支

一般新的独立的功能就必须开辟一个新分支,为了不影响主干的使用

独立功能模块开发完成,就需要跟主线合并,成为一个大版本

master-------- -----|-----------|

--------​|--------------↑ --------- ↑

--------|brach1-----↑----------↑

--------|--------------------------↑

--------|brach2-----------------↑

------------------------------------|出现bug,进行hot_fix-------》

(分支第一版本默认是master最后版本)这个不确定,可能跟你当前所在本地库版本有关系,小伙伴们可以自己试一下

好处

同时多个分支可以并行开发,互相不影响,互相不耽误,提高开发效率

如果一个分支功能开发失败,对主干也不产生影响

使用

git branch -v #查看分支git branch [分支名字] #创建分支#  branch01 e50bd65 修改test.txt 加了333
#* master   e50bd65 修改test.txt 加了333
#*表示当前在哪个分支git checkout [分支名字] #切换分支#合并
#切到主分支
git merge [分支名字] #$ git merge branch01
#Auto-merging test.txt
#CONFLICT (content): Merge conflict in test.txt 发生冲突在test.txt 
#Automatic merge failed; fix conflicts and then commit the result.合并失败
#Administrator@WIN-MKL590IECRF MINGW64 /f/GitStudy/test1 (master|MERGING) 处于合并中
#公司内部商量冲突问题,决定留哪个分支的修改
#人为对文件修改 然后add 和commit解决合并,注意commit不带文件名才能提交

GitHub公网远程库

注册账号 https://github.io

创建一个库 拿到地址https://github.com/NepenthesZGW/ProblemDiscussionPlatform.git

基本操作

新建文件夹
git initgit remote -v #查看远程库的有没有别名git remote add [别名] [远程库url] #起别名git push [别名或者远程库的url] [分支名] #推送git clone [远程库的url] #克隆

邀请团队

搜索管理windows凭据

删除git缓存

为了演示加入团队的操作

#到github的远程仓库的所属者#进入所属者的settings#点击 Manage access#点击 invite a collaborator#添加成员#复制邀请链接#被邀请的人登录账号,访问邀请链接,同意邀请

拉取数据

pull操作

相当于 fetch 和 merge
确认更新了git fetch [远程库别名或者url] [分支] #抓取操作,只是将远程库的内容下载到本地库,工作区并没有更新#可以先git checkout [远程库别名或者url]/[分支] 切到远程库分支,看一下文件,注意需要切换回去git merge [远程库别名或者url]/[分支] #合并#上面的两条命令等于下面的一条命令git pull [远程库别名或者url] [分支] 

团队合作冲突

#如果团队中多个人对同一个文件进行了修改,此时的拉取操作就会产生冲突
#例如:A修改了文件 a,推送到远程服务器,此时B也修改了a文件,也想推送到远程,会失败#先拉取,人为解决冲突
git pull 远程库url或者别名 分支此时处于合并状态,需人为解决冲突后
git add 文件名
git commit -m ""  #后面不要加文件名 git push  [别名或者远程库的url] [分支名] #推送

跨团队合作

#得到需要合作的远程库地址#执行fork操作
#就是去远程库点击fork就行#然后克隆到本地
git clone 【fork后自己远程库的地址】#操作clone后的本地库,然后提交到远程库#需要与别人的项目合并时#进入自己的远程库,有一个pull request操作进行点击点击 New pull request按钮
点击create pull request按钮#操作完成后#项目经理可以登录它的远程库进行合并,还是在pull request里面

SSH免密登录

获取ssh地址

#进入主目录
cd ~ #自己选一个目录也行ssh-keygen -t rsa -C 邮箱#让你三次确认,此时都回车默认就行#会生成公钥和密钥,带pub后缀的为公钥#把公钥内容复制#进入GitHub,登录自己账号
#点击头像找到settings点击
#有一个关于sshkey的导航
#new ssh key#把复制的内容粘贴#起一个别名git remote add 别名 ssh地址

IDEA使用git

idea创建项目

进入settings

version Control有git

选择git.exe路径

VCS -->import into Version Control —>create git Repository

右键可以选择git 然后add 到暂存区

拉取

git pull 远程库url 分支 --allow-unrelated-histories

idea中拉取的话,右键git -->repostory–>pull

推送

git push -u 远程库地址 分支 -f

idea中推送的话,右键git -->repostory–>push

克隆远程库到本地

file–》new --》project from version control…—>git

idea解决冲突

还是一样,先pull,然后手动解决,最后push

注意:

团队合作尽量不要在一个文件里面写

或者先pull然后push

最后

写的有问题的请大家见谅,正处于菜鸟进阶之路


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部