git官网文档:https://www.kernel.org/pub/software/scm/git/docs/ 可以查看命令的详细说明
1. 英语
git n. 饭桶,无用的人 hub n. 中心,焦点,集线器
2. 集中式 VS 分布式
集中式:版本库放在中央服务器,好比图书馆,每个人都需要从中取出一本书,然后再还回去。以这种方式进行交流。
分布式:版本库放在每台电脑中。一台电脑就可以完成版本控制。如果要进行交流,可以借助有一个类似“中央服务器”的电脑,以便于交换“修改”。
3. git分布式版本控制系统
操作 | 命令 | 位置 | 命令 | 位置 | 命令 | 位置 | 命令 | 位置 |
提交 |
工作区 (电脑上本地目录) |
git add 修改的文件 |
暂存区 (stage/index) |
git commit -m "描述“ |
本地仓库 (当前分支) |
git push 远程主机 本地分支 远程分支 git push origin master master |
远程仓库 | |
撤销 |
丢弃工作区修改, 回到暂存区或版本库状态 git checkout --修改的文件 暂存区和工作区的区别 git diff 文件名 |
把暂存区的修改撤回到工作区,可以修改再提交 git reset HEAD 文件名 例:vi a.txt git add a.txt git status 显示暂存区中有a.txt文件 git reset HEAD a.txt 暂存区a.txt消失 |
工作区回到本地仓库中id对应的内容 git reset --hard 修改的id |
从远程获取最新版本并merge到本地 git pull origin master 如果有不能解决的冲突,会显示*branch branch1->branch2 |
版本库(.git)包含暂存区和分支(master:自动创建的第一个分支)
远程仓库默认会被命名为origin,且有一个分支master
4. 基本使用
1) 安装:msysgit是Windows版的Git,从https://git-for-windows.github.io下载,默认安装即可
2) 配置帐户
git config --global user.email "邮箱地址"
git config --global user.name "名字"
3) 与远程仓库操作
github网站上创建一个仓库(远程仓库)
git clone 远程仓库路径 将远程仓库复制到本地
git remote add origin https://github.com/coolqiyu/XXX.git 把本地的仓库推到远程仓库,后面的连接是远程仓库的地址
删除远程文件:把本地的文件先移到其它位置,然后提交即可
git push -u origin master -f 强制更新,这样会使远程修改丢失,一般是不可取的
4) 在本地新建一个项目或者文件等 test.txt
git status 工作区的所有修改(相对暂存区)
git add test.txt 本地的修改add到暂存区,如果git add 会把所有修改都加到暂存区
git commit -m "add a file" 暂存区的内容提交到当前分支(本地仓库),同时-m后写comments
git push origin master 本地仓库的内容(自动创建的master分支)推送到远程仓库(origin分支)
5) 其它
mkdir gitReps 在某个路径下创建一个空目录gitReps
cd gitReps 进入该目录
git init 将该目录初始化成一个git的空版本库,目录下会多了一个.git
的目录
6) 分支操作
git checkout branch2 切换到branch2分支
git checkout -b branch2 创建并切换到branch2分支
git checkout -b branch2 remotebranch 取远程分支remotebranch并创建切换到branch2分支
git merge branch2 将branch2分支合并到当前分支
git branch -d branch2 删除branch2分支
git branch 查看有多少分支
git branch branch2 新建一个branch2分支
git branch -b branch2 新建一个branch2分支
5. 提交撤回修改操作
1) 日志
- git log(--pretty=oneline) 查看历史记录(最近到最远显示)(简单结果)
- log结果: commit 23165485324878412185 后面这个是commit id
2) 版本回退
- 当前版本 HEAD 上一个版本 HEAD^ 上n个版本 HEAD~n
- git reset --hard HEAD^ 回退到上一版本,git log的内容也会相应地把原来最新的删除
- git reset --hard commit id的前几位 可从过去再回到未来
- (每提交一个版本,git会串成时间线,HEAD指针指向当前版本。版本变化时,HEAD指针移动)
git reflog 记录了每一次的命令