Git使用手册

安装

linux ubuntu :sudo apt install git

windows: 从官网下载安装程序,然后一直下一步

MacOs: homebrew安装或者使用Xcode自带的git

因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。

mark@ubuntu:~$ git config --global user.name "mark"
mark@ubuntu:~$ git config --global user.email "markzhou2015@163.com"

创建版本库

第一步:创建文件夹

mark@ubuntu:~$ mkdir local_repository
mark@ubuntu:~$ cd local_repository/
mark@ubuntu:~/local_repository$ pwd
/home/mark/local_repository

第二步:通过git init 命令将目录变成Git可以管理的仓库

mark@ubuntu:~/local_repository$ git init
已初始化空的 Git 仓库于 /home/mark/local_repository/.git/

文件夹中生成的.git目录中包含git管理仓库所需的文件

git init 命令也可以在包含文件的目录中使用,并不一定要新建目录


将文件添加到版本库

  1. git add <file>
  2. git commit -m "xxx"

git add 可以添加单个文件,也可以添加目录,可以多次执行add操作,最后统一commit

git commit 命令的参数 -m "提交说明",建议提交时写上说明


版本库管理

常用命令

  • git status 可以查看当前仓库状态,如果仓库中的文件有修改但未add到缓存区,或者add之后未commit都是可以看到的
  • git diff <file> 查看文件的修改情况
  • git log --pretty=oneline 可以查看提交日志
  • git reflog 可查历史提交日志
mark@ubuntu:~/local_repository$ git log --pretty=oneline
e71476c39304da3242ea165e2d469f2a2e06e8e1 (HEAD -> master) commit 4
e8a41824ccdb783b2d7f37cdf4abcb751cac3cfd commit 3
ea93adb3526362058c474ac38cf865dcef792754 commit 2
9e85fcfe58ace4653c439b63246df41930819849 20181223

e71476c39304da3242ea165e2d469f2a2e06e8e1 这样的内容是sha1计算出来的commit_id

git diff HEAD -- <file>命令可以查看工作区和版本库里面最新版本的区别


版本回退

在Git中,用HEAD表示当前版本,也就是最新的提交1094adb..,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

git reset --hard commit_id 可以切换版本

git reset --hard HEAD^ 不使用commit_id也可以用HEAD^方式回退版本,但是回退之后想回到最后提交的版本,需要使用 git reflog 找到commit_id


管理修改

  1. git checkout -- <file>放弃工作区的修改,实际上是将版本库中的版本copy到工作区中
  2. git reset HEAD <file> 放弃暂存区的修改,即放弃add
  3. git reset --hard HEAD^ 回退版本,即放弃commit

删除文件

如果使用rm直接删除git版本库中的文件,并不能删掉,需要git rm <file> 之后再git commit -m ""才能真的从版本库中删掉文件

如果删错了,想恢复,可以git checkout -- <file>


远程仓库


ssh-keygen -t rsa -C "youremail@example.com"
mark@ubuntu:~/Repository$ git remote add origin git@github.com:ocarinaAC/simpleGit.git
关联远程仓库  

git push -u origin master
本地推送到远程master分支

mark@ubuntu:~/Repository$ git clone git@github.com:ocarinaAC/simpleGit.git
克隆远程仓库

mark@ubuntu:~/Repository/simpleGit$ git pull
从远程仓库pull到本地

分支管理

git branch  列出当前所有分支
git branch <branch name> 创建一个分支
git checkout <branch name> 切换分支
git checkout -b <branch name> 创建并切换到新分支
git merge <branch name> 将指定分支合并到当前分支
git branch -d <branch name> 删除分支

合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

解决冲突

当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。

解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。

git log --graph命令可以看到分支合并图。


暂存工作区

当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。

工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:

一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;

另一种方式是用git stash pop,恢复的同时把stash内容也删了:

你可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令:

$ git stash apply stash@{0}

标签管理

  • 命令git tag <tagname>用于新建一个标签,默认为HEAD,也可以指定一个commit id;
  • 命令git tag -a <tagname> -m "blablabla..."可以指定标签信息;
  • 命令git tag可以查看所有标签。
  • 命令git show <tagname> 可以查看标签的具体信息。
  • 命令git push origin <tagname>可以推送一个本地标签;
  • 命令git push origin --tags可以推送全部未推送过的本地标签;
  • 命令git tag -d <tagname>可以删除一个本地标签;
  • 命令git push origin :refs/tags/<tagname>可以删除一个远程标签。

团队协作

  • 查看远程库信息,使用git remote -v
  • 本地新建的分支如果不推送到远程,对其他人就是不可见的;
  • 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
  • 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
  • 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name
  • 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。
原文地址:https://www.cnblogs.com/endurance9/p/10165935.html