Git 常用基本命令汇总

创建git仓库

创建目录

$ mkdir <dirname>
$ cd <dirname>
$ pwd

初始化Git仓库

$ git init

将文件添加到Git仓库

$ git add <file>  // 可反复多次使用,添加多个文件
$ git add .  // 提交全部文件
$ git commit -m <message>

所有的版本控制系统,其实只能跟踪文本文件的改动。而图片、视频这些二进制文件没法跟踪文件的变化,只能把二进制文件每次改动串起来,不能知道具体更改内容。

修改及撤销

查看修改

$ git status  // 查看被修改过,但还没准备提交的修改
$ git diff <file>  // 查看difference,显示的格式正是Unix通用的diff格式
$ git diff HEAD -- <file>  // 查看工作区和版本库里面最新版本的区别

版本回退

$ git log  // 查看git提交历史,以便确定要回退到哪个版本
$ git log --pretty=oneline  // 简化输出信息

$ git reflog  // 查看所有git命令历史,以便确定要回到未来的哪个版本
$ git reset --hard HEAD^  // 回退到上一个版本
$ git reset --hard <commit id>  // 指定到(过去或未来)的某个版本,版本号写前几位即可

撤销修改

撤销工作区:

$ git checkout -- <file>  // 把文件在工作区的修改全部撤销,让这个文件回到最近一次git commit或git add时的状态

撤销暂存区:

$ git reset HEAD <file>  // 把暂存区的修改撤销掉(unstage),重新放回工作区
$ git checkout -- <file> 

撤销版本库:

$ git reset --hard HEAD^  // 回退到上一个版本

删除文件

$ rm <file>
$ git rm <file>
$ git commit -m "remove <file>"

撤销删除:

$ git checkout -- <file>

从来没有被添加到版本库就被删除的文件,是无法恢复的。

rebase

$ git rebase  // 把本地未push的分叉提交历史整理成直线

远程仓库

创建ssh key

$ ssh-keygen -t rsa -C "youremail@example.com"

添加远程库

$ git remote add origin git@<server-name>:<path>/<repo-name>.git  // 关联已有的本地仓库
$ git push -u origin master  // 第一次推送master分支的所有内容,添加-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来
$ git push origin master  // 推送最新修改

从远程库克隆

$ git clone <link>

Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。

查看远程库信息

$ git remote
$ git remote -v // 查看更详细的信息

推送远程分支

$ git push origin <branch-name>

抓取分支

$ git branch --set-upstream-to origin/<branch-name> <branch-name> // 指定本地分支与远程分支的链接

$ git pull  //抓取分支, 遇到no tracking information,需先执行上条命令,指定本地分支与远程分支的链接

关联多个远程库

$ git remote -v
$ git remote rm origin  // 删除默认远程库名

$ git remote add <origin1> <link1>  // 绑定远程库1
$ git push <origin1> master  // 推送至远程库1

$ git remote add <origin2> <link2>  // // 绑定远程库2
$ git push <origin2> master  // 推送至远程库2

分支管理

创建分支

$ git checkout -b dev  // 创建并切换到dev分支
-b参数表示创建并切换,相当于:
$ git branch dev  // 创建dev分支
$ git checkout dev  // 切换到dev分支

查看当前分支

$ git branch
* dev  // 当前分支前面会标一个*号
  master

合并分支

$ git checkout master  // 切换到master分支
$ git merge dev  // 将dev分支的工作成果合并到master分支上
$ git merge --no-ff -m "merge with no-ff" dev  // --no-ff参数,表示禁用Fast forward,用普通模式合并,保留历史分支信息

删除分支

$ git branch -d <name>
$ git branch -D <name> // 强行删除未合并的分支

解决冲突

$ git status  // 查看冲突的文件

Git用<<<<<<<=======>>>>>>>标记出不同分支的内容。

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

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

$ git log --graph  // 查看分支合并图

储存工作区

$ git stash  // 储存工作区
$ git stash list  // 查看已存储的工作区
$ git stash apply  // 恢复工作区,stash内容并不删除,需要用git stash drop来删除
$ git stash pop  // 恢复工作区,同时删除stash内容

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

$ git stash apply stash@{i}

标签管理

查看标签

$ git tag  // 查看标签
$ git show <tagname>  // 查看标签信息

创建标签

$ git tag <tagname>  // 给最新的commit打标签
$ git tag <tagname> <commit id>  // 给指定的commit打标签
$ git tag -a <tagname> -m <desc> <commit id>  // 创建带有说明的标签,-a指定标签名,-m指定说明文字

删除标签

删除本地标签:

$ git tag -d <tagname>

删除远程标签:

$ git tag -d <tagname>  // 先删除本地标签
$ git push origin :refs/tags/<tagname>  // 将删除推送到远程

推送标签到远程库

$ git push origin <tagname>  // 推送单个标签
$ git push origin --tags  // 推送全部尚未推送到远程的本地标签

自定义Git

自定义配置

$ git config --global user.name <user-name>  // 配置用户名
$ git config --global user.email <user-email>  // 配置邮箱

$ git config --global color.ui true  // 让Git显示颜色

--global参数,表示这台机器上所有的Git仓库都会使用这个配置!

忽略特殊文件(.gitignore)

忽略文件的原则是:

  1. 忽略操作系统自动生成的文件,比如缩略图等;
  2. 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
  3. 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
$ git add -f <file>  // 强制添加被忽略文件到git
$ git check-ignore -v <file>  // 检查忽略规则

配置别名

$ git config --global alias.<commond-name> <commond>

例:

$ git config --global alias.unstage 'reset HEAD'

$ git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

配置文件

配置Git的时候,加上--global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用。

每个仓库的Git配置文件都放在.git/config文件中:

$ cat .git/config 
[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
    precomposeunicode = true
[remote "origin"]
    url = git@github.com:michaelliao/learngit.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[alias]
    last = log -1

当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中:

$ cat .gitconfig
[alias]
    co = checkout
    ci = commit
    br = branch
    st = status
[user]
    name = Your Name
    email = your@email.com

参考链接:

廖雪峰Git: https://www.liaoxuefeng.com/wiki/896043488029600

Git官网: https://git-scm.com/docs

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值