Git 是分布式版本控制。分布式版本控制系统没有中央服务器,每个人都有一个完整的版本库,通过各自的修改推送给对方,使得可以多个人协作。
Git 数据库其实是一个简单的“键值对(key-value)”数据库。向该数据库中插入任意类型的内容,它都会返回一个键值。通过返回的键值可以在任意时刻再次检索该内容。
Git 用于版本控制可解决以下问题:
-
辅助合并代码并灵活切换各个历史版本;
-
区分代码提交人、比较任意两个版本差异;
-
多人协作开发;
基本分为工作区Workspace、暂存区index、本地仓库Repository、远程仓库Remote,
另外在远程和本地仓库之间还有/refs/remote,是远程仓库的一个只读引用,不可修改。
pull(拉取):获取远程仓库中的代码更新,并且合并到本地仓库中(pull=fetch+merge)
fetch(获取):获取远程仓库的代码更新(remote->/refs/remote)
merge(合并):将获取到的远程更新合并到本地仓库(/refs/remote->Repository)
commit:(提交):将更新的代码提交到本地仓库
push:(推送):将更新的代码推送到远程仓库
commit and push:(提交且推送):将更新的代码提交到本地仓库后推送到远程仓库----常用
diff:(比较差异):比较本地的最近一次受版本控制(提交或拉取后)的文件与该文件修改后的
差异----常用
diff with previous version:(与上一版本比较差异)比较本地的上一次受版本控制的
(上一次提交或拉取)文件与该文件修改后的差异
show log:(显示日志):显示远程仓库所有开发提交记录日志(要看最新的首先拉取)----常用
show Reflog:(显示引用日志):显示自己本地仓库的所有操作(从克隆开始,克隆、拉取、提交)
check for modifications:(检查已修改)好像功能与diff(比较差异)差不多
revert:(还原):还原代码至最近一次版本控制(可以单个还原和批量选择还原)----常用
clean up;(清理):删除某些文件,如未受版本控制文件、忽略文件
add:(添加):可以把未受版本控制文件加入本地仓库
git init -b "name": 指定新的分支
git branch -a :显示所有分支
git branch "name": 创建分支
git checkout -b "name": 创建并立即切换到指定的分支
git checkout "name": 切换到指定分支
git merge :合并分支
git add . : 提交修改(workspace->index)
git stash: 暂存
git branch -m "oldname" "newname":修改分支名
git merge "name":把指定分支合并到主分支(/refs/remotes->Respostory)
git commit -m 'text':将本地暂存的修改提交到版本库,并加注释
Git 基本组成框架:
- Workspace:开发者工作区,也就是你当前写代码的目录,它一般保持的是最新仓库代码。
- Index / Stage:缓存区,最早叫Stage,现在新版本已经改成index,位于.git目录中,它用来存放临时动作,比如我们做了git add或者git rm,都是把文件提交到缓存区,这是可以撤销的,然后在通过git commit将缓存区的内容提交到本地仓库
- Repository:仓库区,是仓库代码,你所有的提交都在这里,git会保存好每一个历史版本,存放在仓库区,它可以是服务端的也可以是本地的,因为在分布式中,任何人都可以是主仓库。
- Remote:远程仓库,只能是别的电脑上的仓库,即服务器仓库。
Git 命令:
-
配置 Git 环境:初次使用git需要设置你的用户名以及邮箱,一些需要登录权限的仓库会要求登录,git默认使用配置邮箱以及用户名登入,但会要求你手动输入密码。
git config --global user.name "你的用户名" git config --global user.email "你的邮箱"
-
创建本地仓库:需要一个空文件夹,先
mkdir
创建一个,再cd
进入,在空目录下git init
初始化当前仓库;初始化后会生成隐藏的Git
的配置文件目录,可以用ls -ah
查看。 -
添加文件到缓存:
git add
-
提交到本地仓库:
git commit -m "commit 信息"
,不加后面信息的话会打开编辑器让你写。 -
重新上一次提交信息:
git commit --amend
,之后会打开编辑器。 -
查看历史提交日志:
git log
、git reflog
-
回滚代码仓库:
git reset --恢复等级
,有三个等级:- 使用
--soft
就仅仅将头指针恢复,已经 add 的暂存区以及工作空间的所有东西都不变。 - 如果使用
--mixed
,就将头恢复掉,已经 add 的暂存区也会丢失掉,工作空间的代码什么的是不变的。 - 如果使用
--hard
,那么一切就全都恢复了,头变,aad 的暂存区消失,代码什么的也恢复到以前状态。
- 使用
-
回滚到指定历史版本:先使用
git log
查看历史版本,再使用git reset --hard 要回滚id
命令回滚。 -
单个文件回滚:
git log 文件名
,git reset 要回滚id 文件名
。 -
查看提交之后文件是否做了改动:
git status
。 -
将文件撤销回到最近一次修改的状态:
git checkout -- file
。 -
创建分支:使用
git checkout -b 分支名
参数来创建一个分支,创建完成分支后会自动切换过去。 -
查看分支:
git branch
,也就是查看HEAD的指向。 -
切换分支:
git checkout 分支名
。
安装git:
yum install git
终端直接输入git
,会告诉你git的各种使用方法
想让当前文件夹用Git管理,现将当前文件夹变成Git仓库,进入文件夹输入命令
git init
在目录中新建一个文件newfile.txt
vim newfile.txt
查看当前状态,说newfile.txt未被追踪,需要用git add 文件名
提交
git status
提交之后,再查看状态,显示修改将要被提交
git add newfile.txt
git status
如果要提交所有的文件修改,可
git add .
修改newfile.txt,再查看状态,修改没有被添加。
用git diff
命令可以查看两文件的区别,即还没有被添加的更改内容到底是什么。如下图,可以看出我加了一个“change”
git add .
添加更改
git reset
撤回更改,文件又没有被追踪了
加提交人,加邮箱,以后提交就会显示是我的提交
git config --global user.name "lizhengxiao"
git config --global user.email "[email protected]"
git commit
把修改提交,-m
后面加修改的描述
有些新文件只想放在文件夹里,但不想提交由git管理,可以建立一个.gitignore
,写入这些文件的文件名列表。
如果git已经追踪一个文件,再把它加到.gitignore
列表中,git还是会继续追踪它。必须先停止追踪它
git rm --cashed newfile1
git commit -a
可以添加所有修改,再提交,但以前没追踪过的文件不会被添加进去
git branch 分支名
创建分支,git checkout 分支名
进入分支,git branch
查看分支
在主分支下,git merge 分支名
合并分支。合并后子分支还在,可以git branch -d 分支名
删除;分支没合并的时候想删除,会提示,用D才能删。
把文件上传到GitHub托管,建立仓库,他会提示你怎么上传
git remote add
告诉Git项目在网上的位置在哪
git remote add origin https://github.com/LiZhengXiao99/d.git
如果不保存密码,每次push都要输入git密码,先执行下面命令,即可保存密码
git config credential.helper store
git push
将更改上传
git push --set-upstream origin master
邀请别人合作,在setting-Collaborators里,搜他的用户名,邀请会发到对方的邮箱里,对方同意之后,也能对项目提交更改。
对方先将仓库复制到自己的电脑
git clone 仓库链接
对方修改后,我再git pull
就会将项目最新的文件都拉到本地