再不学Git就晚啦,一篇文章让你学会Git

很早之前就听说过Git和Github,但是并没有很放在心上,觉得可能不是很重要,而且英文的界面让我直接劝退。心想等着以后需要的时候再学习应该也不晚,随着了解知识的增加,现在越来越觉得Git和Github的重要性。工欲善其事必先利其器,将一个高效实用的工具好好使用可以起到事半功倍的效果。

简介

Git历史

git是目前世界上最先进的分布式版本控制系统。

提到Git,就不得不提起Linux。

Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了。到了2002年,Linux系统已经发展了十年了,代码库之大让Linus很难继续通过手工方式管理了,于是Linus选择了一个商业的版本控制系统BitKeeper,BitKeeper授权Linux社区免费使用这个版本控制系统。2005年,开发Samba的Andrew试图破解BitKeeper的协议被BitMover公司发现了,于是BitMover公司要收回Linux社区的免费使用权。

于是,Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内 Linux系统的源码已经由Git管理了!
Git迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。

Git安装

Git 各平台安装包下载地址为:http://git-scm.com/downloads

GitGit 工作区、暂存区和版本库

在这里插入图片描述

Git和代码托管中心

我们总是将Git和Github联系在一起,Github就是Git 的一个代码托管中心。
代码托管中心的任务 : 维护远程库

  • 局域网环境下
    GitLab 服务器
  • 外网环境下
    Github
    码云

Git命令行操作

本地库初始化

命令: git init
在这里插入图片描述
.git 目录中存放的是本地库相关的子目录和文件,不要删除和随便修改

设置签名

形式

  • 用户名
  • Email地址:

作用:区分不同开发人员的身份
这里设置的签名和登录远程库(代码托管中心)的账号,密码没有任何关系。

命令

  • 项目级别/仓库级别

    git config user.name ......
    git config user.email ......
    

    仅在当前本地库范围内有效
    信息保存位置: .git/config

  • 系统用户级别

    git config --global user.name ......
    git config --global user.email ......
    

    登录当前操作系统的用户范围
    信息保存位置: ~/.gitconfig
    优先级:
    就近原则,项目级别优先于系统用户级别,二者都有时采用项目级别的签名。

Git基本操作

git clone 克隆

使用 git clone 拷贝一个 Git 仓库到本地,让自己能够查看该项目,或者进行修改。

 git clone [url]

在这里插入图片描述
可以看到本地文件夹中多出了:
在这里插入图片描述
默认情况下,Git 会按照你提供的 URL 所指示的项目的名称创建你的本地项目目录。 通常就是该 URL 最后一个 / 之后的项目名称。如果你想要一个不一样的名字, 你可以在该命令后加上你想要的名称。

git add 添加

git add 命令可将工作区文件添加到暂/缓存区。

git status 状态查看

git status 以查看在你上次提交之后是否有修改。
可以查看工作区,暂存区状态
在这里插入图片描述
在GitTest目录下新建一个文件test.txt
在这里插入图片描述
红色字体表示文件未被追踪,使用git add test.txt 添加进入即可
在这里插入图片描述
现在再使用git status:
在这里插入图片描述
从暂存区撤销:

git rm --cached filename

git commit 提交

从暂存区提交到本地库

git commit filename

输入命令后会显示如下内容,类似于代码的注释
在这里插入图片描述
点击i,输入内容:
在这里插入图片描述
:wq保存退出
在这里插入图片描述
也可以直接使用

git commit -m "My first commit new file:test.txt"

:set nu 显示行号

使用git commit将文件从暂存区提交到本地库后,再次使用git status
在这里插入图片描述
会发现此时暂存区已经没有要提交的文件了。

如果将test.xml 修改一下再使用git status
在这里插入图片描述
撤销修改:git checkout – filename

git diff

执行 git diff 来比较文件差异。

git diff 命令显示已写入缓存与已修改但尚未写入缓存的改动的区别。
git diff [文件名]

  • 将工作区中的文件和暂存区进行比较

git diff [本地库中的历史版本] [文件名]

  • 将工作区中的文件和本地库历史记录比较

不带参数比较多个文件

修改test.txt文件后使用git diff
在这里插入图片描述

和之前的版本进行比较
在这里插入图片描述

  • 尚未缓存的改动:git diff
  • 查看已缓存的改动: git diff --cached
  • 查看已缓存的与未缓存的所有改动:git diff HEAD
  • 显示摘要而非整个 diff:git diff --stat

git log

只add 没有commit 的,log里面看不到记录

git log

多屏显示控制翻页
空格 向下翻页
b 向上翻页
q 退出

git log --pretty=oneline
在这里插入图片描述

git log --oneline

在这里插入图片描述

git reflog
HEAD@{移动到当前版本的步数}
在这里插入图片描述

git reset

git reset --hard [索引值](推荐)
基于索引值的操作,能退回到之前的状态
在这里插入图片描述
git reset --hard HEAD^回退一步
git reset --hard HEAD^^回退一步
git reset --hard HEAD~10 回退十步

reset 命令的三个参数

  • –soft参数
    • 仅仅在本地库看、移动HEAD指针
  • –mixed参数
    • 在本地库移动HEAD指针
    • 重置暂存区(暂存区也发生变化)
  • –hard参数
    • 在本地库移动HEAD指针
    • 重置暂存区(暂存区发生变化)
    • 重置工作区(工作区发生变化)

找回删除文件

前提: 删除前,文件存在时的状态提交到了本地库
操作:
git reset --hard [指针位置]

  • 删除操作已经提交到本地库:指针位置指向历史记录
  • 删除操作尚未提交到本地库:指针位置使用HEAD

创建一个a.txt文件,提交到git工作区后删除
在这里插入图片描述
再将被删除的文件添加到工作区
在这里插入图片描述
查看历史记录,然后后退到文件没有被删除的状态
在这里插入图片描述

git tag

如果创建工程达到一个重要的阶段,并希望永远记住那个特别的提交快照,可以使用 git tag 给它打上标签。
-a 选项意为"创建一个带注解的标签",会打开编辑器让你写入注解
git tag -a v1.0
如果我们要查看所有标签可以使用git tag
在这里插入图片描述

  • 创建标签
    git tag v1.0

  • 查看已有标签
    git tag

  • 删除标签
    git tag -d v1.1

  • 查看此版本所修改的内容
    git show v1.0

commit 91388f0883903ac9014e006611944f6688170ef4
Author: "syaving" <"[email protected]">
Date: Fri Dec 16 02:32:05 2016 +0800
commit dir
diff –git a/readme b/readme
index 7a3d711..bfecb47 100644
— a/readme
+++ b/readme
@@ -1,2 +1,3 @@
text
hello git
+use commit
[root@Git git]# git log –oneline
91388f0 commit dir
e435fe8 add readme
2525062 add readme

git remote

查看当前配置有哪些远程仓库
git remote add [远程仓库别名] [远程仓库地址]

删除远程仓库:
git remote rm [别名]

分支管理

Git分支管理的本质是创建和移动指针
什么是分支?
版本控制过程中,使用多条线同时推进多个任务。

分支的好处

  • 同时并行推进多个功能开发, 提高开发效率
  • 各个分支再开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响,失败的分支删除重新开始即可。

分支的创建

下面的master 就是一个主分支
在这里插入图片描述

  • 查看分支git branch -v
    在这里插入图片描述
  • 创建分支 git branch 分支名
    在这里插入图片描述

切换分支

git checkout hot_fix
在这里插入图片描述

合并分支

如果再hot-fix分支上修改了文件并提交到工作区
在这里插入图片描述此时hot-fix分支上的test.txt 文件内容为:
在这里插入图片描述
master 分支上的文件内容为:
在这里插入图片描述
将hot-fix 所作的修改合并到master分支
1. 切换到接受修改的分支(被合并,增加新内容)
git checkout [被合并分支名]
2. 执行 merger 命令
git merger [有新内容的分支名]
在这里插入图片描述

解决冲突

在合并分支的时候,不同的分支可能有不同的内容,如何解决问题呢?
在master分支和hot-fix分支上同时对test.txt 文件进行修改,然后add,commit
hot-fix分支下:
在这里插入图片描述
master分支下:
在这里插入图片描述
在这里插入图片描述
在hot-fix 分支上合并master分支上的内容:
在这里插入图片描述
此时查看test.txt文件,出现一些新增内容,这就是冲突的表现:
在这里插入图片描述
当前分支的内容:
bash <<<<<<< HEAD 现在在hot-fix分支进行修改 =======
另外一个分支的内容
bash 现在在master分支进行修改 >>>>>>> master
解决办法:
- 编辑文件,删除特殊符号,修改内容
在这里插入图片描述
- 使用git addgit commit -m "提示内容" (后面不要添加文件名)
在这里插入图片描述

Github

先看一下远程库和本地库的一个简单关系图

在这里插入图片描述

创建一个Git远程仓库

首先在Giuhub上创建一个仓库
在这里插入图片描述
在这里插入图片描述
创建好了之后,自动进入下面的界面
在这里插入图片描述
复制地址,然后进入git bash界面
给地址起一个别名firsttest
在这里插入图片描述
查看远程库
在这里插入图片描述
其中fetch表示取回,push表示推送
将master分支推送到仓库中:
git push firsttest master
会提示你输入用户名和密码,输入后点击login
在这里插入图片描述
下面表示push成功
在这里插入图片描述
回到Github 的网站,刷新页面
在这里插入图片描述

克隆

将远程库克隆到本地库

  • 打开Github网站,进入仓库,复制仓库地址
    在这里插入图片描述
    新建一个文件夹,在新文件夹目录下打开Git Bash 界面
    输入
git clone [项目地址]

在这里插入图片描述
克隆时有以下效果

  1. 初始化本地库(不需要使用git init 初始化)
  2. 创建 远程地址别名 (默认为origin)
  3. 完整的把远程库下载到本地

push

在刚刚的文件夹的git bash中新建文件,git add, git commit后
使用下面命令将文件上传

git push origin master

在这里插入图片描述

pull

clone下载整个仓库,pull把某个分支下载到本地

pull = fetch + merge 

fetch是读操作,对于远程库来说不需要输入密码

git fetch [远程库地址别名] [远程分支名]

merge 是合并操作

git fetch [远程库地址别名/远程分支名]

一般先用fetch读取文件,确认好了之后再使用merge

SSH免密登录

切换到ssh目录
在这里插入图片描述

ssh-keygen -t rsa -C 邮箱账号

在这里插入图片描述
将生成的密钥复制
在这里插入图片描述
在这里插入图片描述
进入项目,点击use ssh,复制
在这里插入图片描述
打开git bash,添加地址别名:
git remote add origin_ssh [email protected]:Yx-u/FirstTest.git
在这里插入图片描述
此时使用push就不需要再使用密码了
在这里插入图片描述

可能出现的错误

git push到GitHub的时候遇到! [rejected] master -> master (non-fast-forward)的问题

error: failed to push some refs to 'https://github.com'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

解决办法:
1、git pull origin master --allow-unrelated-histories 把远程仓库和本地同步,消除差异

2、重新add和commit相应文件

3、git push origin master

4、此时就能够上传成功了

在Github上托管Android项目

配置Git

打开File/Settings
在这里插入图片描述
进行Git的配置
在这里插入图片描述
配置成功,会出现
在这里插入图片描述

配置Github

在这里插入图片描述
输入Github的账号和密码
在这里插入图片描述

托管项目

在这里插入图片描述
填写相关信息就可以了

猜你喜欢

转载自blog.csdn.net/weixin_45468845/article/details/107265614