Git基本命令使用详解

624 阅读5分钟

目前大家接触到最多的版本控制工具就是Svn和Git,Git是目前世界上最先进的分布式版本控制系统,其实 Git 跟 SVN一样有自己的集中式版本库或服务器,但是Git 更倾向于被使用于分布式模式,也就是每个开发人员从中心版本库/服务器上chect out代码后会在自己的机器上克隆一个跟中心版本库一模一样的本地版本库;


Git本地配置

  • 查看当前配置: git config --list

  • 修改 git 的 name 和 email :

    • git config --global user.name <name>

    • git config --global user.email <email>


SSH Key 密钥生成

许多 Git 服务器都使用 SSH 公钥进行认证。 为了向 Git 服务器提供 SSH 公钥,如果某系统用户尚未拥有密钥,必须事先为其生成一份。 这个过程在所有操作系统上都是相似的。 首先,你需要确认自己是否已经拥有密钥。 默认情况下,用户的 SSH 密钥存储在其 ~/.ssh 目录下。 进入该目录并列出其中内容,你便可以快速确认自己是否已拥有密钥:

$ cd ~/.ssh
$ ls
authorized_keys2  id_dsa       known_hosts
config            id_dsa.pub


我们需要寻找一对以 id_dsaid_rsa 命名的文件,其中一个带有 .pub 扩展名。 .pub 文件是你的公钥,另一个则是私钥。 如果找不到这样的文件(或者根本没有 .ssh 目录),你可以通过运行 ssh-keygen 程序来创建它们。在 Linux/Mac 系统中,ssh-keygen 随 SSH 软件包提供;在 Windows 上,该程序包含于 MSysGit 软件包中。

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/schacon/.ssh/id_rsa):
Created directory '/home/schacon/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/schacon/.ssh/id_rsa.
Your public key has been saved in /home/schacon/.ssh/id_rsa.pub.
The key fingerprint is:
d0:82:24:8e:d7:f1:bb:9b:33:53:96:93:49:da:9b:e3 schacon@mylaptop.local

然后进行第一步操作,打开~/.ssh目录下的公钥文件

$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAklOUpkDHrfHY17SbrmTIpNLTGK9Tjom/BWDSU
GPl+nafzlHDTYW7hdI4yZ5ew18JH4JW9jbhUFrviQzM7xlELEVf4h9lFX5QVkbPppSwg0cda3
Pbv7kOdJ/MTyBlWXFCR+HAo3FXRitBqxiX1nKhXpHAZsMciLq8V6RjsNAQwdsdMFvSlVK/7XA
t3FaoJoAsncM1Q9x5+3V0Ww68/eIFmb1zuUFljQJKprrX88XypNDvjYNby6vw/Pb0rwert/En
mZ+AW4OZPnTPI89ZPmVMLuayrD2cE86Z/il8b+gw3r3+1nKatmIkjn2so1d01QraTlMqVSsbx
NrRFi9wrf+M7Q== schacon@mylaptop.local

将公钥内容复制下来,然后在托管项目的GitLab服务器上添加SSH KEY,具体怎么添加可以百度搜索一下,就几部而已,在此不加说明;


工程克隆、下载

  • git clone 远程工程:git clone https://xxxxxxx.git

  • git fetch 把所有远程分支更新到本地

  • git fetch origin <originName> :<localName> :把远程对应分支更改更新到本地分支


常用命令汇总:

注意:在Git中HEAD 指向的版本是当前版本,^ 表示上一个版本,~N 表示上N个版本;


分支操作:

  • 查看分支:git branch

  • 查看远程所有分支:git branch -r

  • 查看本地和远程所有分支:git branch -a

  • 创建分支:git branch <name>

  • 切换分支:git checkout <name>

  • 创建并切换分支:git checkout -b <name>

  • 合并某分支到当前分支:git merge <name>

  • 删除本地分支:git branch (-d | -D) <name>

  • 删除远程分支:git push origin -d <name>

  • 分支重命名:git branch (-m | -M) <oldbranch> <newbranch>

注意: 不能删除当前所在本地分支。


  • 查看当前分支本地修改:git status

  • 查看分支的commit信息(倒叙排列)

    • git log 查看commit id, Author, Date, commit info

    • git shortlog 按提交者分类显示提交信息

    • git log --oneline 只输出commit id 和 commit info

    • git log --stat 查看增删查改了哪些文件



文件的添加、提交、拉取、推送、合并

  • 添加新增文件到暂存区:git add xx

  • 添加所有新增文件到暂存区:git add .

  • 撤销暂存区的更改: git reset xx ;
  • 撤销所有暂存区的更改: git reset HEAD
  • 清除工作空间文件:git checkout xx
  • 清除所有工作区文件:git checkout .
  • 暂存变更文件:git stash save "暂存备注"

  • 恢复暂存文件(并将暂存弹出栈):git stash pop (stash@{x})

  • 恢复暂存文件(继续保存在栈空间):git stash apply (stash@{x})
  • 查看stash记录:git stash list
  • 清除所有stash记录:git stash clear
  • 提交变更文件:git commit -m "变更备注"

  • git pull origin xx:xx 从远程获取xx分支的更新到本地xx并merge
       等同于 :
    • git fetch origin xx
    • git checkout xx (-b )
    • git merge origin/xx


  • git push origin <currentName>:<currentName> 把本地分支<currentName>推送到远程<remoteName>分支,远程没有则创建

  • git push --set-upstream origin xx 本地分支与远程分支进行关联追踪
  • 推送到远程:git push origin <name>

  • 比对两个分支:git diff <name1> <name2>

  • 比对本地和远程分支:git diff <name> origin/<name>

  • 合并某个分支:git merge <name>

  • 将一个feature分支变基到master分支:
    • git checkout feature
    • git rebase master
  • 基于远程分支dddd创建新分支:git checkout -b xxxx origin/dddd
  • 强制更新吧本地xx分支更新到服务器分支xx:git push -f  origin xx : xx


注意:一般git pull 操作相当于先拉取远程分支变化,然后自动merge ,等同于:git fetch 然后checkout当前分支再 merge 一下;



版本回退

  • 回退到上一版本:git reset --hard HEAD^

  • 回退到上上版本:git reset --hard HEAD^^

  • 回退到上上版本:git reset --hard HEAD~2

  • 回退到某个版本:git reset --hard <commit id>

注:慎用hard回滚,回滚后的代码与前一次commit提交保持一致,暂存区所有内容清除,也可以结合使用soft和mixed两种方式,根据自己实际情况操作;

  • 强制推送到远程分支:git push -f  (该命令慎用,尤其在服务器主开发分支上操作)