Linux 下git的使用总结(详解)

一、Github---代码托管平台

GitHub是一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名GitHub。

简单来说,Github是一个代码托管的平台,公有库是免费的,所以海量的代码都是开源的,别人都在修改它,但是会给你记录操作日志,大多数公司的大型项目都是在上面运行操作的,因为他支持多用户在上面对一份代码进行版本的更新等;

二、git--分布式版本控制系统

 

1.概念

Git(读音为/gɪt/。)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。

2.暂存区和工作区

工作区(Working Directory):就是你在电脑里能看到的目录,比如我的"local_git"t文件夹就是一个工作区。

版本库(Repository):工作区有一个隐藏目录“.git”,这个不算工作区,而是Git的版本库。 
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

对于任何一个文件,在 Git 内都只有三种状态: 
- 已提交(committed)已提交表示该文件已经被安全地保存在本地数据库中了; 
- 已修改(modified)已修改表示修改了某个文件,但还没有提交保存; 
- 已暂存(staged)。已暂存表示把已修改的文件放在下次提交时要保存。

三、linux下git的本地操作

1.安装git

安装git的操作,大家可以网上下载一个linux版本的git,一般安装linux系统的时候都会自带git映射文件,只需找到安装即可(网上查找安装的命令,在这里就不详说了)。

主要注意一个问题,因为git是分布式版本控制系统,所以首次安装的时候都会让机器自报家门,(邮箱+名字)这里的邮箱和名字需要你在github官网(www.github.com)上注册你账号信息,为什么要这样做呢?因为你的代码是要联机上传到github代码托管平台上去的,联机操作下文会详说。(当然,如果你不打算联机操作,那么这个邮箱+名字,你可以随意)。

config --global user.name "yourname" //设置你的名字

config --global user.email “your email” //设置你的邮箱

2.初始化仓库(创建版本库)

第一步,创建工作区,为了方便你可以创一个空的文件夹,作为它的工作区;

第二步:(进入该文件夹,ls你会发现什么都没有),调用git init初始化,此时会在此目录下创建一个隐藏的.git文件,即版本库,(可以用ls -a命令查看)

 

3.添加文件到暂存区、提交到版本库

git add 文件  //添加文件到暂存区

git commit -m ‘版本信息(一般填写进行了什么操作)’  //将暂存区间的文件提交到版本库

 

4.查看工作区的状态

git status //查看工作区的状态,(如果你工作区的文件有改动,调用此命令会给你操作提示;)

这里我做了更新版本的操作,至此我们就有两个版本了;

 

5.查看历史修改情况(修改时间,修改人),日志的使用
 

git log  // 显示最近到最远的提交

git reflog    // 显示比较简单的信息的所有提交

 

6.查看修改内容,版本差异

例如一名长程序员旅行一周回来,忘记自己曾经修改了工作区文件的哪些东西,这时查看一下修改内容也是很不错的。

git diff 文件名  //查看工作区修改内容

7.从暂存区撤离将要提交的文件

给定一个这样的场景,你讲一个文件修改完毕后,将它添加到暂存区,以便将来提交,但是你突然觉得还有东西没有改好,那只能把文件从暂存区撤回。

git reset HEAD 文件名 //将暂存区的文件撤回

 

8.撤销修改

在第4点的时候,我们修改了工作区文件,查看状态,git会提示我们添加到暂存区或者撤回操作;

git checkout 文件名  //撤销修改,回到前一次保存的状态

 

9.版本回退

版本回即就是改变HEAD的指向;

git reset --hard HEAD  //查看当前版本

git reset --hard HEAD^  //查看上一个版本,^代表上一个的意思,HEAD^^代表上两个;HEAD~100代表上100个版本,

git reset --hard +版本标示 // 可以用git reflog 查看版本的标识,选择要切换的版本;

 

10.删除文件

如果直接rm删除文件,只是删除工作区的文件,只是与版本库不一样了,git status 会提示你。

恢复工作区文件:git checkout  -- 文件名

如果你真要删除版本库的文件,那么就  git rm 文件名  ---->git commit

(额,这个就不演示了哈,真删了的话我没法接着演示了 哈哈,就给你们看看书上的算了。)

 

四、git远程仓库

 

1.在Github上添加ssh key,使自己的电脑和Github建立连接、

注册一个GitHub账号,就可以免费获得Git远程仓库。 
为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。 由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以需要设置;

第1步:创建SSHKey。在用户主目录下,看看有没有ssh目录,如果有,再看看这个目录下有没有id_ rsa和
id_ rsa.pub这两个文件,如果已经有了,可直接跳到下一步。 如果没有,打开Shell (Windows 下打开Git Bash),创建SSH Key :

$ ssh-keygen -t rsa -C "youremail@example. com"

你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。如果一切顺利的话,可以在用户主目录里找到ssh目录,里面有id _rsa和id_ rsa.pub两个文件,这两个就是SSH Key的秘钥对,id. rsa是私钥,不能泄露出去,id_ rsa.pub是公钥,可以放心地告诉任何人。


第2步:登陆GitHub,打开"Account settings","SSH Keys"页面:
然后,点"Add SSH Key",填上任意Title,在Key文本框里粘贴id_ rsa.pub文件的内容

第3步:测试本地仓库与远程仓库的联通;

测试 ssh -T  git@github.com
//不言而喻,从这里一下的步骤都需要联网了

 

 

2.添加Github上的远程库

 

找到创建按钮,创建远程仓库;

 

创建成功,系统会提示你:可以将你的本地仓库与远程仓库关联,即上传到远程仓库;

git remote add origin git@github.com:用户名/远程仓库
//把本地仓库上传到远程仓库,记住要用ssh,不要用https


git push -u origin master 
//由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会 把本地的master分支内容推送到远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

 

 

3.从远程库克隆

git clone git@github.com:用户名/远程仓库名.git
//克隆远程仓库;在你本地仓库没有的情况下
//https也可以克隆,但是不好,一是速度慢,而是需要证书、口令;少只开放http端口公司才有

4.从远程仓库拉文件

git fetch remote-name             or          git pull remote-name
命令从远程仓库抓取数据到本地。两者不同: 
- git pull,相当于git fetch+git merge。 
- git fetch命令会到远程仓库中拉取所有你本地仓库中还没有的数据。 
运行完成后,你就可以在本地访问该远程仓库中的所有分支,将其中某个分支合并到本地,或者只是取出某个分支,一探究竟。有一点很重要,需要记住,fetch 命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支,只有当你确实准备好了,才能手工合并。git pull命令自动抓取数据下来,然后将远端分支自动合并到本地仓库中当前分支。

git pull origin master
//从远程仓库拉文件,为的是给自己的修改拿一份最新的基础

 

5.从本地仓库推文件去远程仓库

git push origin master 
//从本地推文件到远程仓库

6.分支管理

先给出几组图,理解什么是分支;

 

 

  • 查看分支:git branch   //分支前面带*号的为当前使用分支
  • 创建分支:git branch name
  • 切换分支:git checkout name   
  • 创建+切换分支:git checkout -b name   
  • 合并某分支到当前分支:git merge name   //要在主分支下合并其他分支
  • 删除分支:git branch -d name

7.解决冲突

我们对于创建分支,只是将head指向创建的分支,master还是指向原先主线上,但是假设你的分支在没有合并之前,master分支就超前了一个提交,也就是master指向移动了,当你的分支提交之后,试图合并的时候就可能会出现冲突。(可能的意思是你在代码的同一个位置修改了不同的东西)。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值