一、Git 起步

1. 什么是Git

  • Git 和其它版本控制系统(包括 Subversion 和近似工具)的主要差别在于 Git 对待数据的方式。
  • Git 更像是把数据看作是对小型文件系统的一系列快照
  • 在 Git 中,每当你提交更新或保存项目状态时,它基本上就会对当时的全部文件创建一个快照并保存这个快照的索引。
  • 为了效率,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。
  • Git 对待数据更像是一个 快照流

2. 三种状态

Git 有三种状态,文件可能处于其中之一: 已提交(committed)、已修改(modified) 和 已暂存(staged)

  • 已修改 表示修改了文件,但还没保存到数据库中。
  • 已暂存 表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
  • 已提交 表示数据已经安全地保存在本地数据库中。
    在这里插入图片描述
  • 工作区是对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
  • 暂存区是一个文件,保存了下次将要提交的文件列表信息,一般在 Git 仓库目录中。 按照 Git 的术语叫做“索引”,不过一般说法还是叫“暂存区”。
  • Git 仓库目录是 Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,复制的就是这里的数据

3. 基本的 Git 工作流程

  1. 在工作区中修改文件。
  2. 将你想要下次提交的更改选择性地暂存,这样只会将更改的部分添加到暂存区。
  3. 提交更新,找到暂存区的文件,将快照永久性存储到 Git 目录。

如果 Git 目录中保存着特定版本的文件,就属于 已提交 状态。 如果文件已修改并放入暂存区,就属于 已暂存 状态。 如果自上次检出后,作了修改但还没有放到暂存区域,就是 已修改 状态。

二、Git 常用命令

1. 基本操作

(1)用户配置

git config --global user.name "xxxxxx"
git config --global user.email xxxxxx@163.com

关于配置的一些信息:
–local(默认,高级优先):只影响本地仓库
–global(中优先级):只影响所有当前用户的git仓库
–system(低优先级):影响到全系统的git仓库

(2)其他常用命令

//初始化仓库
git init

//对状态的跟踪
git status

//添加文件内容到暂存区(同时文件被跟踪)
git add
	
//添加所有文件
git add .

//从暂存区提交 -m:注释
git -commit -m 'first commit' 

//从工作区提交
git commit -a -m 'full commit'

//查看提交历史记录
git log 

git log --online
git log --color --graph

//工作区与暂存区的差异
git diff 

//暂存区与某次提交的差异,默认为HEAD
git diff  --cached [<reference>]

//工作区与某次提交的差异,默认为HEAD
git diff  [<reference>]

//将文件内容从暂存区复制到工作目录
git checkout -- <file> 

//撤销暂存区内容
//将文件内容从上次提交复制到缓存区
git reset HEAD <file> 

//将内容从上次提交复制到工作目录
git checkout HEAD -- <file> 

下面这张图展示了以上命令,以及各个命令在不同工作区之间的调度情况:
在这里插入图片描述

2. 分支操作

(1)git branch

主要负责分支的增删改查

//创建一个分支
git branch <branchName> 

//删除一个分支
git branch -d <branchName> 

//显示所有分支信息
git branch -v 

(2)git checkout

git checkout 也可以跟一个commitid,这时候HEAD指向这个commitid跟所有分支分离,这个状态为detached

//通过移动HEAD检出版本,可用于切换分支
git checkout <branchName> 

//创件一个分支并切换
git checkout -b <branchName> 

//将其移动到一个引用
git checkout <reference> 

//恢复到上一个分支
git checkout - 

(3)git reset

//git reset 将当前分支回退到历史某个版本
//(默认)
git reset --mixed <commit> 

git reset --soft<commit> 

git reset --hard <commit> 

git reflog

(4)git stash

git stash 用来保存目前的工作目录和暂存区状态,并返回到干净的工作空间。

有时候我们要切换分支会有以下提示,是因为当前分支还有内容未提交,现在切换内容会丢失。这时候要用到git stash 命令
在这里插入图片描述

// 通过save 后面传入信息标识 放到stash区
git stash save "push to stash area" 

//查看收藏的记录
git stash list 

//将保存的内容重新恢复到工作目录
git stash apply stash@{0}

//将对应的stash记录删除 
git stash drop stash@{0} 

//= git stash apply + git stash drop
git stash pop 

(5)git merge

用于进行分支合并
git cat-file -p HEAD //查看某个对象的具体信息
git merge 基本会出现冲突
merge fast-forward

//默认  不会显示 feature,只保留单条分支记录。git直接把HEAD指针指向合并分支的头,完成合并。属于“快进方式”,不过这种情况如果删除分支,则会丢失分支信息。因为在这个过程中没有创建commit
merge fast-forward 

//指的是强行关闭fast-forward方式。可以保存之前的分支历史。能够更好的查看 merge历史,以及branch 状态
git merge --no-ff 

//修剪提交历史基线,俗称“变基”
git rebase 

git rebase --onto master 5755487

//对某个提交设置一个别名
git tag 

3. 远程操作

//初始化一个本地的远程服务器
git init ~/git-server --bare  

//将本地历史推送到远程
git push 

//git remote:远程仓库相关配置操作
//添加一个远程仓库的别名
git remote add  origin ~/git-server 

//查看远程仓库信息
git remote -v 

//获取远程仓库的提交记录
git fetch 

// git pull = git fetch + git merge
git pull 

//克隆一个远程仓库作为本地仓库
git clone 

三、其他常用命令(参考了一篇总结好的博客)

1. 版本控制

$ git log	//查看提交历史记录,从最近到最远,可以看到3次
$ git log --pretty=oneline	//加参,简洁查看
$ git reflog	//查看每一次修改历史
$ cat test.txt	//查看文件内容
$ git status	//查看工作区中文件当前状态
$ git reset --hard HEAD^(HEAD~100)(commit id)	//回退版本
$ git checkout -- test.txt	//丢弃工作区的修改,即撤销修改
$ git reset HEAD test.txt	//丢弃暂存区的修改(若已提交,则回退)

2. 删除文件

$ rm test.txt
//直接删除
$ git rm test.txt
$ git commit -m "remove test.txt"
//删错了,恢复
$ git checkout -- test.txt

3. 远程仓库

$ ssh-keygen -t rsa -C "youremail@example.com"	//创建SSH Key
$ git remote add origin git@github.com:Daisy/AKgit.git	//关联
$ git push -u origin master	//将本地内容推送到远程仓库(第一次)
$ git push origin master	//将本地内容推送到远程仓库(之后)
$ git remote -v        //查看远程仓库信息
$ git remote rm origin	//删除远程仓库(解绑)
$ git clone git@github.com: Daisy/AKgit.git	//克隆远程仓库
//克隆之后使用和查看
$ cd gitskills
$ ls
$ git remote	//查看远程库的信息
$ git remote -v	//查看远程库的详细信息

4. 多人协作

$ git checkout -b dev	//创建并切换到分支dev
//创建并切换到分支dev,同上
$ git branch dev	//创建
$ git checkout dev	//切换
//新版本
$ git switch -c dev	//创建并切换到分支dev
$ git switch master	//直接切换分支
$ git branch		//查看当前分支
$ git merge dev	(--no-ff)(-m)//合并,把dev分支的工作成果合并到master分支上
$ git branch -d dev	//删除dev分支 
$ git stash	//将现场储藏起来
$ git stash list	//查看储存的工作现场
//恢复和删除
$ git stash apply
$ git stash drop
//恢复并删除
$ git stash pop
$ git cherry-pick 4c805e2	//复制修改
$ git push origin master(dev)	//推送分支
$ git checkout -b dev origin/dev	//创建远程origin的dev分支到本地
$ git pull	//抓取分支(解决冲突)
$ git branch --set-upstream-to=origin/dev dev//指定本地与远程dev的链接
$ git rebase	//把本地未push的分叉提交历史整理成直线
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐