1. 全局系统变量设置
#设置用户名
git config --global user.name "xxx"
#设置Email
git config --global user.email "xxxxxxxx@qq.com"
2. 版本库操作、文件提交、修改
#初始化版本库、进入版本库目录
git init
#将文件添加到版本库、文件为readme.txt
git add readme.txt
#提交到版本库、参数-m后跟提交说明
git commit -m "This is a first file!!!"
#提交指定文件 如果他没有添加到缓存区,他会添加到缓存区并提交,当这个文件是修改时
git commit readme.txt -m "This is a first file!!!"
#查看版本库状态
git status
#查看difference、即查看某个文件修改详情
git diff readme.txt
3. 版本回退
#显示从最近到最远的提交日志
git log
#一行显示提交日志
git log --pretty=oneline
#在git中,HEAD表示当前版本、HEAD^表示上一个版本、HEAD^^表示上上个版本,也可表示为HEAD~2,一次类推
#回退到上个版本
git reset --hard HEAD^
#回退到指定版本、先通过git log 找到相应版本id,然后直接回退到指定版本id的版本
git reset --hard 6c4ada2b0bc2ebde08201431ca2df6bf3f40ba34
#Git提供了一个命令git reflog用来记录你的每一次命令
git reflog
4. 管理修改
git add 只是将变化的文件添加到暂存区,git commit才会将变更文件提交到版本库中
#查看工作区和版本库里面最新版本的区别
git diff HEAD -- readme.txt
5. 撤销修改
#丢弃工作区的修改
git checkout -- readme.txt
命令git checkout -- readme.txt
意思就是,把readme.txt
文件在工作区的修改全部撤销,这里有两种情况:
- 一种是
readme.txt
自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态; - 一种是
readme.txt
已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit
或git add
时的状态。
撤销添加到暂存区的文件
如果修改的文件已经添加到了暂存区,这时把暂存区的修改撤销掉(unstage),重新放回工作区 可使用如下命令
git reset HEAD readme.txt
git reset
命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD
时,表示最新的版本。
删除版本库中文件
#从版本库删除文件
git rm delete.txt
#提交删除
git commit -m "删除测试文件"
6. 远程仓库
以码云为例,参考码云官方提交文档,博客git无法pull仓库refusing to merge unrelated histories
1. 在码云上创建一个项目,填好各项信息,复制好项目https地址
2. 本地初始化一个项目
首先,你需要执行下面两条命令,作为 git 的基础配置,作用是告诉 git 你是谁,你输入的信息将出现在你创建的提交中。
```shell
#设置用户名
git config --global user.name "zhouhuo"
#设置Email
git config --global user.email "1509012781@qq.com"
```
然后在你的需要初始化版本库的文件夹中执行:
```shell
git init
git remote add origin <你的项目地址> #注:项目地址形式为:https://gitee.com/xxx/xxx.git或者 git@gitee.com:xxx/xxx.git git@gitee.com:xxx/xxx.git测试暂时行不通
```
这样就完成了一次版本你的初始化。
如果你想克隆一个项目,只需要执行:
```shell
git clone <项目地址>
```
3. 完成第一次提交
进入你已经初始化好的或者克隆项目的目录,然后执行:
```shell
git pull origin master
```
如果报如下错误:
```error
From https://gitee.com/ZhouHuoClever/gitlearn
* branch master -> FETCH_HEAD
* [new branch] master -> origin/master
fatal: refusing to merge unrelated histories
```
出现原因是因为本地和远程是两个不同的项目,需要先合并项目,执行如下命令
```shell
#参数 --allow-unrelated-histories为合并项目
git pull origin master --allow-unrelated-histories
```
然后继续执行如下命令
```shell
#这里需要修改/添加文件,否则与原文件相比就没有变动
git add .
git commit -m "第一次提交"
git push origin master
```
然后如果需要账号密码的话就输入账号密码,这样就完成了一次提交。
7. 分支管理
分支介绍参考分支管理/创建与合并分支
1. 创建并切换dev分支
-
创建并切换dev分支
git checkout -b dev
git checkout
命令加上-b
参数表示创建并切换,相当于以下两条命令:#创建分支dev git branch dev #切换到dev分支 git checkout dev
-
查看当前分支
git branch
git branch
命令会列出所有分支,当前分支前面会标一个*
号。 -
提交修改到远端dev分支
git add readme.txt git commit -m "提交到远端" git push --set-upstream origin dev
-
将dev分支合并到master分支
#合并指定分支到当前分支 git merge dev #执行如下命令即可同步到远端 git push
合并分支结果如下:
Updating 578c8e6..a4d65b1 Fast-forward readme.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
注意到上面的
Fast-forward
信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master
指向dev
的当前提交,所以合并速度非常快。 -
删除dev分支
git branch -d dev
因为创建、合并和删除分支非常快,所以Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在
master
分支上工作效果是一样的,但过程更安全。
2. 解决冲突
参考[廖雪峰的博客 分支管理/解决冲突][https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001375840202368c74be33fbd884e71b570f2cc3c0d1dcf000],[码云官方提供的冲突解决方案][http://git.mydoc.io/?t=154702]
冲突合并一般是因为自己的本地做的提交和服务器上的提交有差异,并且这些差异中的文件改动,Git 不能自动合并,那么就需要用户手动进行合并
如我这边执行`git pull origin master`
拉取的时候,Git 自动合并,并产生了一次提交。
如果 Git 不能够自动合并,那么会提示
![冲突报错](https://oss.zouuo.com/image_1591154552240.png?imageView2/0/format/gif/q/75%7Cwatermark/2/text/aHR0cHM6Ly93d3cuemhvdWh1by5jb20uY24=/font/5a6L5L2T/fontsize/400/fill/I0ZGRkZGRg==/dissolve/80/gravity/SouthEast/dx/10/dy/10%7Cimageslim)
这个时候我们就可以知道`README.MD`有冲突,需要我们手动解决,修改`README.MD`解决冲突
确保所有的冲突都得以解决,然后就可以使用
```shell
git add .
git commit -m "fixed conflicts"
git push origin master`
```
即可完成一次冲突的合并。
评论区