git介绍及基础操作

2018-09-06  本文已影响0人  尛尛大尹

Git简介

Git[/gIt/]:一个基于C语言开发的开源分布式版本管理系统

举个例子:一个程序每次修改都要保存原来的版本,时间一长修改次数多了,就会记不清楚每次修改了什么,而且往往一个项目会有多个人修改,这样人为管理起来就会很混乱,这时候就可以用Git来记录每次修改。

Git、GitHub和Gitlab区别

Git和GitHub共同使用来托管自己的代码和笔记,可以在任何有网络的地方拷贝下来自己的代码继续使用

分布式vs集中式

Linux安装Git

目前,Git可以再Linux,UNIX,Mac,Windows上面运行
官方网站http://git-scm.com

> git 如果没有安装Git系统会给与提示
> yum install git-core
1.Git官网下载所需要的源码包
wget http://mirrors.edge.kernel.org/pub/software/scm/git/..
2.编译安装,依次执行下列命令
tar -zxf git-*.tar.gz
cd git-*.tar.gz
./config
make&make install

版本库(repository)

> mkdir first-repo 任意一个可以创建文件的目录
> pwd 查看目录所在的路径
/root/app/first-repo
> cd /root/app/first-repo
> git init
> ls -a
你会发现有一个`.git`目录,这个就是Git用来跟踪管理版本库的,不要随意修改这个目录下的文件,会破坏仓库

> tree .git
     config ------git仓库的配置文件
     objects ------所有被追踪的对象
     refs ------放置状态信息

优先级:(如果三个文件同时配置了某个参数)
git config > git config --global > git config --system
作用域越广优先级越低

> git config --global user.name <username> 配置全局用户名
> git config --system user.email <email>  配置系统Email
> git config --list 或者-l查看配置了哪些项目
> git config (--global/--system) --unset <> 取消某个配置项

eg:

> git config --list
user.name=ymd
user.email=1464525869@qq.com
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
merge.comflictstyle=diff3
> git config --unset merge.comflictstyle
> touch file1 创建一个新的文件
> git add file1 没有任何显示则成功,文件添加至暂存区
> git commit -m "commit file1 " 文件提交至仓库 
               -m后面添加本次提交的说明,最好是有意义的
1.jpg

[图片上传中...(3.jpg-7b61eb-1536198146557-0)]

    工作区:Working Directory
    暂存区:Staging Area
    版本库:repository

工作区:就是我们自己创建的或者自己电脑上可以看到的就是工作区,比如上面创建的first-repo文件夹就是一个工作目录

版本库,就是我们说的仓库(repo)。工作区下面的隐藏文件.git就是Git版本库,Git可以管理这个目录里的所有文件,每一个文件的添加,修改,删除都可以被跟踪,可以在需要的时候还原到任何历史的时刻。
Git版本库里存储了stage(暂存区),还有Git为我们自动创建的第一个分支master,以及指向master的指针HEAD

> cat .gitignore
*.[oa]忽略以.o或者.a结尾的文件
*~ 忽略以~结尾的文件

Git版本管理基础操作

提交分为了两个步骤:
1.git add <file1 file2...>:将工作区中相关修改的内容那个提交到暂存区,暂存区就相当于缓存区,可以后期更改里面的内容
2.git commit -m <message>:将暂存区的内容一次性提交到版本库

被提交的修改(changes to be committed):列出将在下次提交中被
                                   纳入版本库中的、被修改的文件
不会被更新的修改(changed but not updated):列出已经被修改,
                                但是还没有提交到暂存区中的文件
未被跟踪的文件(untracked files):列出所有的新增文件

--short选项使得输出更加紧凑

此命令比较的是工作目录中当前文件和暂存区域快照之间的差异,也
就是修改之后还没有暂存起来的变化内容.

git diff --cached 命令:

已经暂存起来的文件和上次提交时的快照之间的差异,
show diff of staged changes.
(Git 1.6.1 及更高版本还允许使用 git diff --staged,效果是相
同的).

git diff HEAD命令:

比较 woking directory 和上次提交之间所有的改动.

git diff [version tag]命令:

想看自从某个版本之后都改动了什么
跟 log 命令一样,diff 也可以加上--stat 参数来简化输出.

git diff [branchA] [branchB]命令:

它实际上会返回一个由 A 到 B 的 patch,不是我们想要的结果.

git diff [branchA]…[branchB]命令:

一般我们想要的结果是两个分支分开以后各自的改动都是什么
实际上它是:git diff $(git merge-base [branchA] [branchB]) 
[branchB]的结果.
[option]:
\-n   部分输出
\--oneline 显示概述信息
\--stat 先是被修改的文件
\--dirstat 显示包含被修改文件的目录
\--shortstat 显示项目中有多少文件被修改,新增,删除了多少文件
\--graph 图形化显示一脚之间的关系
eg:
> git log -n 3 显示最后三次提交
> git log --oneline 
> git log --shortstat --oneline
> git log --format=fuller 显示更多详细信息
> git log --graph
commit 9a77f4a693087681ca1845c3eec548f6366c0f91
Author: ymd <1464525869@qq.com>
Date:   Tue Aug 14 17:50:22 2018 +0800

git fsck查看版本库的完整性

如上图所示,third commit是最新一次提交

eg:回退到上一个版本,即second commit、
# git reset --hard HEAD^
回退后再用git log查看,你会发现最新一次提交third commit已经看不
到了,但是如果我们后悔回退了怎么办?
如果我们窗口没有没有关掉还可以找到最新提交的commit id,就可
以回到原third commit版本,可以只取前面的一些数值,只要能够唯一指定即可
eg:最新一次提交的commit id为9a77f4a693087681ca1845c3eec548f6366c0f91
# git reset --hard 9a77f 这样就退到原来那个未来的版本了
(相对于此时的版本second commit,third commit就是未来版本)

HEAD指向的是哪个版本号,当前版本就定位在哪里,同时将工作取得内容恢复到那个版本,所以如果不小心关掉了窗口,查不到未来那个版本commit id,也有办法恢复
git reflog:记录了每一次命令,以确定要回到未来的版本。

>  git rm -r -n --cached 文件/文件夹名称
加上-n,执行命令时,不会删除任何文件,而是展示此命令要删除的文件列表预览
> git stash 将修改存储到储藏栈

git stash list查看当前栈中储藏了哪些修改内容

> git stash list
stash@{0}: WIP on master: 62e3b2c test
stash@{1}: WIP on master: 62e3b2c test
stash@{2}: WIP on master: 6a00470 change file2 tiwce in the original

stash pop恢复被储藏的修改

1.恢复位于栈顶的被储藏修改
> git stash pop
2.恢复更早之前的更改
> git stash pop stash@{2}
上一篇下一篇

猜你喜欢

热点阅读