Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。git
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。github
Git 与经常使用的版本控制工具 CVS, Subversion 等不一样,它采用了分布式版本库的方式,没必要服务器端软件支持。数据库
对于任何一个文件,在 Git 内都只有三种状态:vim
已修改表示修改了某个文件,但尚未提交保存;缓存
已暂存表示把已修改的文件放在下次提交时要保存的清单中。安全
已提交表示该文件已经被安全地保存在本地数据库中了;服务器
由此咱们看到 Git 管理项目时,文件流转的三个工做区域:Git 的工做目录,暂存区域,以及本地仓库。app
地址:https://git-scm.com/分布式
第一次安装完成git后,咱们在全局环境下配置基本信息:我是谁工具
$ git config -l 查看配置信息 $ git config --globla -l 查看全局配置信息 配置全局信息:用户名和邮箱 $ git config --global user.name 'xxx' $ git config --global user.email 'xxx@xx.xx'
建立一个仓库文件夹,鼠标右键选择git Bash Here
$ git init //=>会生成一个隐藏的文件夹".git" (这个文件夹千万不要删除,由于暂存区和历史区还有一些其余的信息都在这里,删了就不是一个完整的git仓库了)
在本地编写完成代码后(在工做区),把一些文件提交到暂存区
$ git add xxx 把某一个文件或文件夹提交到暂存区 $ git add . 或 -A 把当前仓库中全部最新修改的文件都提交到暂存区 $ git status 查看当前文件的状态(红色表明在工做区/绿色表明在暂存区/看不见东西证实全部修改的信息都已经提交到历史区)
当前文件状态
$ git commit -m'描述信息:本次提交内容的一个描述' 【不加空格写描述信息】 查看历史版本信息 $ git log 查看提交记录 $ git reflog 包含回滚信息
注意:从工做区提交到暂存区,从暂存区提交到历史区,是把内容赋值一份传过去的,本区域中依然存在这些信息,只有这样才能对比出哪些文件在某个区
提交记录
四、历史版本回滚
根据历史版本号进行代码回滚
$ git reset --hard d4970cc 【取版本号的前7位】
GitHub至关于中央服务器
注册/登陆:https://github.com/
远程仓库地址
1、//创建本地仓库和远程仓库的链接 查看本地仓库和哪些远程仓库保持连接 $ git remote -v 让本地仓库和远程仓库新建一个连接[origin是随便起的一个连接名,通常都叫origin] $ git remote add origin [GIT远程仓库地址] 2、//删除连接 $ git remote rm origin
注意:想要将本地的代码推送至远程仓库,本地的代码必须在历史区【只有历史区的代码才能推送至远程仓库】
// 每次提交以前最好先将远程仓库的代码拉取到本地[别人有可能修改了代码]合并代码的做用 $ git pull origin master // 将本地代码推送至GitHub(须要输入GitHub用户名和密码) $ git push origin master // 将GitHub仓库克隆到本地 $ git clone [远程仓库git地址] [别名:能够不写,默认仓库名] $ git clone https://github.com/songzhixue1993/201908.git
/* * 真实项目开发流程 * 一、组长或负责人先建立中央仓库[增长协做者] * 二、小组成员基于$ git clone 把远程仓库及默认的内容克隆到本地一份 * 解决了三件事情 * 初始化了一个本地仓库[$ git init] * 和对应的远程仓库保持了关联[$ git remote add] * 把远程仓库默认内容拉取到了本地[$ git pull] * 三、每一个组员写完本身的程序后,基于"git add/git commit"把本身修改的内容存在到历史区,而后经过"git pull/git push"把本地信息和远程仓库信息保持同步便可[可能涉及到冲突的处理] */
git diff # 对比工做区和本地仓库 git diff --cached # 对比缓存区和本地仓库 git log # 查看当前版本以前全部的提交记录 git reflog # 查看全部的提交记录 git log -n 2 # 显示最近几条数据 git log -p # 对比每提交的差别 git log --format="%an:%ae:%s" # 自定义输出格式 git reset --hard 版本号 # 回滚到指定版本 git chekout --file # 将文件回滚到最近的一次提交 git status # 查看状态 git reset HEAD file # 将指定的文件从缓存区拉取到工做区 # 工做区必须有变更 # 保存开发状态 git stash # 快照 git stash pop # 恢复并删除快照 git stash list # 查看全部快照 git stash apply stash{id} # 恢复指定快照 git stash drop # 删除快照 git branch # 查看分支 git branch dev # 建立dev分支 git checkout dev # 切换到dev分支 git branch -d dev # 删除分支 git checkout -b dev1 # 建立分支并切换分支 # 合并分支,在合并到的分支上执行 git merge dev # 在master主分支上执行,(将dev的代码合并到master) # 冲突 # 不一样的分支在对同一行代码进行修改,在代码合并时会发生冲突 """ 一、合并时间不能太长,通常2-3天合并一次 二、完成一个小功能合并一次 三、合并的时候全部人都要在 """ # 克隆分支 git checkout -b dev origin/dev [指定以origin/dev为模板建立一个分支] # 删除远程仓库的分支 git checkout --delete origin # tag git tag # 查看标签 git tag -a name -m '提交信息' git tag -a name -m '提交信息' hash值 # 以哈希值为模板建立一个标签tag git tag -d name # 删除本地tag git push origin :refs/tags/v0.5 # 删除远程仓木的tag(给远程仓库推送了一个空的tag) # 忽略文件 # 把不想上传的文件写在.gitignore文件中 vim .gitignore - db.py # rebase 变基 将提交记录变成一条直线 # 切换git用户 git config --global --unset user.name "xxx" git config --global --unset user.email "xxx"