Git的特点
分布式版本管理
- 每个人的电脑都是一个完整的版本库,减少备份负担
- 支持离线操作:用户完全可以脱离git服务端在本地查看,编写和提交代码
分支的新建与合并,方便快速
Git本地版本库的使用
仓库的创建
初始化版本库:
git init
ps:
- 可以在也有项目的目录下创建,用git来管理该项目
- 也可以在一个空的目录下,创建一个新的仓库,用来管理新的项目
文件的修改与撤销
修改后比较:
git diff [filename]
ps:
- 不指定文件名则是比较所有文件的修改。
- 默认比较当前工作区与当前版本库(HEAD)
- 要比较当前工作区和历史的版本库,请在diff后加上历史版本号。
- 要指定两个版本库,请在diff后家还是那个两个版本号。
放弃工作区的修改或删除(文件还未add到暂存区):
git checkout --filename
放弃暂存区的修改(文件add到暂存区,还未提交到版本库):
git reset HEAD filename
或者:
(经实验测试不正确)git rm --cahe filename
Git跟踪并管理的是修改,而非文件。
删除文件
手动删除文件之前或者之后,将删除提交到暂存区:
git rm filename
将删除提交到仓库:
git commit -m "coments"
把文件(修改或新建)提交到仓库
将文件提交到暂存区:
git add filename1 [filename2 ...]
将文件提交到仓库:
**
git commit -m "coments"**
查看仓库状态
git status
仓库状态分为:
Untracked files
(未被跟踪的文件:未执行 git add)>Changes not staged for commit
(修改还未准备提交:未执行 git add)Changes to be committed
(修改可以被提交: 已经git add 到暂存区)nothing to commit, working directory clean
每次修改,如果不add到暂存区,那就不会加入到commit中。
可以使用
commit -a
,不add到暂存区的已修改过的文件也会被提交,而未被跟踪的文件不会被提交- 回退到历史版本
查看历史版本号(只能查看比当前版本还要早的版本号):
git log
-git log --pretty=oneline
(版本日志显示更加简洁)
-git log -<数字>
显示最近几条提交日志
回退到版本versionNo :
git reset --hard versionNo
ps:
-HEAD
表示当前版本
-HEAD^
表示上一个版本
-HEAD^^
表示往上两个版本,以此类推。
-HEAD~100
表示往上100个版本
- versionNo 也可以是查询到的具体的版本号或者一部分
如:efc14ac4ed0facbcd6355a68140ca598d697e36c
或者:efc1、efc14、efc14a ……
Git远程版本库的使用
添加远程库关联
git remote add origin git@192.168.1.111:/data/gitdata/middleware
ps:
- 远程主机名origin也可以改为别的名称,惯例使用origin。
- 远程库可以是自己建立的远程库,也可以是Github远程库(为避免每次输入远程库主机用户git的密码,可以在本地生成公私钥对,将公钥提交到远程库的authorized_keys文件中)
- 添加远程库的前提:本地库是一个初始化空库(或者是克隆的远程库,删除了关联)。远程库可以是空库,也可以是原项目库。
本地分支关联远程分支:
git branch --set-upstream <本地分支名> <远程主机名>/<远程分支名>
- 本地分支名和远程分支名最好一致
推送到远程库
本地版本库推送到远程库:
git push <远程主机名> <本地分支名>:<远程分支名>
ps:
- 不指定远程分支名,则默认分支同名推送(若远程不存在同名分支,则创建一个新的分支)。
删除远程库分支
git push <远程主机名> --delete <远程分支名>
ps:
- 执行该操作后本地版本库仍然存在。
- 删除本地版本库分支
git branch --delete <分支名>
从远程库更新
从远程库更新到本地库:
git pull <远程主机名> <远程分支名>:<本地分支名>
ps:
- 不指定本地分支名,则默认与当前分支合并,相当于指令:
git fetch <远程主机名>
git merge <远程主机名>/<远程分支名>
分支追踪关系
本地和远程分支默认是同名追踪关系
也可以手动建立追踪关系,以后不指定远程分支时,则按照追踪关系执行,如:
git branch --set-upstream master origin/next
- 不指定本地分支名,则默认与当前分支合并,相当于指令:
远程库克隆
git clone 远程库地址
ps:
远程库地址支持https协议和ssh协议。
- https协议:
比如:https://github.com/scuyxi/testgit.git
速度较慢,需要输入口令。 - ssh协议
比如:git@192.168.1.111:/data/gitdata/middleware
速度较快
可以配置免密码传输(密钥对)。
克隆的仅仅是master分支
通过以下命令导出远程某个分支:git checkout -b <本地分支名> <远程主机名>/<远程分支名>
- https协议:
参考资料:
Git相关资料整理
https://gold.xitu.io/entry/586eddf6a22b9d00587829ce?from=timeline&isappinstalled=1https://github.com/xirong/my-git/blob/master/ixirong.com.md
Git权威指南
http://www.worldhello.net/gotgit/中文 Git Community Book
http://gitbook.liuhui998.com/中文官方文档V1
https://git-scm.com/book/zh/v1英文官方文档V2
https://git-scm.com/book/en/v2中文 Git参考手册
http://gitref.org/zh/index.html英文 Git参考手册
http://gitref.org/index.html全面介绍
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000windows下入门使用:
http://blog.jobbole.com/78960/