Git常用命令

ZFIREH 2020年06月03日 142次浏览

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 commitgit 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.zhouhuo.com.cn/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`
  ```

  即可完成一次冲突的合并。 

引用

本文引用了廖雪峰的专栏 Git教程