一:什么是git
分布式版本控制系统。保存某一时刻,某些文件内容快照的系统。
其中有集中式的版本控制系统,例如:SVN. 集中式将文件的内容/版本信息/修改信息都保存在一个中央服务器中。使用者将特定版本的文件内容拷贝到本地进行操
作,问题在于单点故障,当服务器或者网络出现问题,那么所有的版本都访问不了,并且对比,提交代码都进行不了。svn保存的是每一次的变化。
分布式的版本控制系统,例如:git. 使用者将整个系统代码都复制到本地仓库中,相当与中央服务器在某个特定时间的一个完整备份。这样远程服务器就起到了一个保
存与交换代码的作用。是目前使用最广的一个分布式版本控制系统。git会给每一个版本一个完整快照。版本之间切换较快。
二:git工作流。
三种状态:已修改(工作区),已暂存(暂存区),已提交(本地仓库)。
git的一大特色是分支开发。冲突的情况减少
一般的开发流程:
创建仓库(/从远程仓库克隆)--》创建并切换到特定分支--》创建/修改文件--》提交工作区文件到暂存区--》提交暂存区文件到本地仓库--》切换到主分支--》
合并特性分支到主分支--》推送本地仓库到远程仓库。
三:举例
项目中将远程服务器的内容克隆下来:
git clone git@。。。。。。。。。。。。 //这样就克隆到本地
cd gittest //进入这个文件夹,默认在master分支上。
git branch //在master分支上。一般没有这个权限,需要切换到自己的分支
git checkout -b dev4//这样就创建了一个新的分支。
git branch //切换到自己刚建立的分支。
vim new //新建文件 --》add 1
git status //查看状态。
git add new //由工作区换到暂存区
git commit -m 'new' //由暂存区到本地仓库
git push -u origin dev4 //由本地仓库推送到远程服务器。
git diff //查看不同分支之间的差别。
四:当当前分支与master分支有冲突的时候。
需要合并到分支。
git merge origin master //确保将master的内容合并到分支。没有问题后再 git push.
五:让部分文件不上传
方式是:vim .gitignore(有模板,將不想上傳的文件夾写道里面)
六:git常用的命令
1.git init :创建空的本地仓库,或者对存在的仓库进行初始化。
创建文件夹,进入,git init.
建立好一个空的本地仓库以后可以与远程的仓库进行关联:
git remote add origin 仓库地址。
git remote 既可以查看关联的远程仓库
git remote -v 可以查看详细的信息。
重命名关联的远程仓库:
git remote rename origin o
删除关联的远程仓库:
git remote remove o
2.git clone 克隆远程仓库
3.git remote 管理远程库。
首先在gitlab上建立好远程库,复制地址,然后在本地链接:git remote add origin 地址
git remote --help
4.git reflog 记录所有操作记录。只存在于使用者的本地仓库。会记录提交以及其他操作比如换分支。
5.git log 本地以及远程仓库都有。查看提交历史。只记录提交。
6.git status 查看状态,自己感觉更像是一种监听。如果这之间新建过文件,再次git status时会提示,可以进行 git add 文件 是将文件由工作区转到暂存区。
然后就可以提交,git commit -m '一种记录的消息' 文件,会提示push到服务器。
7.git config:配置
git config --add user.name .....//加名字
git config --add user.email ....//加邮箱
利用git config -e进行查看更改内容。
8.git diff //默认显示工作区与暂存区工作的差异
git diff --staged //比较暂存区与本地仓库的差异
9.git add //由工作区提交到暂存区
10.git commit //暂存区提交到本地仓库
11.git push //本地仓库提交到服务器
git push -u origin branch2 //这个不是很理解,目的是设置为跟踪来自origin的远程分支branch2.
git log 中记录着很多东西,可以进行相互比较。方式是:git diff 不同提交的码
git diff 不同的分支
切换分支命令:git checkout 分支名。
12.git pull //拉取远程仓库到本地仓库并合并到本地仓库。git branch 查看当前分支。相当与先fetch,然后再merge。
13.git fetch 是将远程服务器的文件复制到本地仓库,对本地工作区的文件没有影响。
git merge :是将本地仓库中的文件合并到本地工作区中。意思就是说没有merge前,本地仓库中的数据与本地工作区的数据有可能是不一样的,但是merge以后
就统一了。
冲突情况下的合并取消:
git merge --abort
14.git branch :显示所有的分支,并且标注出当前所属的分支。新建分支:git branch 分支名。
删除分支:git branch -d 分支名
查看分支的详细信息:git branch -v
新建一个分支然后就进入这个分支:git checkout -b branch44
将本地文件还原为本地仓库:
git checkout --hello.py
将某文件还原为上一次的提交:
git checkout HEAD~ hello.py
还原为最近的一次提交:
git checkout HEAD hello.py
15.git reset:重置HEAD到指定的状态(HEAD为当前的分支)
git reset --mixed HEAD~ //默认是--mixed,是将本地仓库的上一个版本复制到暂存区,而不会修改工作区的内容。
git reset --hard HEAD~ //将本地仓库的内容复制到暂存区与工作区中,这个需要注意。删除不可逆。
git reset --soft HEAD~ //只是将指针指到了上一个版本,不会复制到任何地方。
git diff --cached//查看暂存区与本地仓库的区别。
16.git revert 版本号 ://撤销一些已经存在的提交
17.git cherry-pick//用于把某次提交的内容合并到当前分支。
18.git rebase//用于把一个分支的修改合并到当前分支。