关于代码仓库,在几年前,可能你们使用的仍是 SVN 比较多,可是最近几年,GIt 开始更加流行起来,与 SVN 相比,Git 是一个分布式版本控制系统,它在本地也有一个仓库,在不须要联网的状况下也能够进行代码提交的工做,只是不能 push 到远程,他的主要特色以下:git
虽然不少 IDE 已经集成了图形化的操做界面,例如 Android Studio 和 IDEA 等,还有专门的 Git 图形化工具 SourceTree,可是对于想更深刻使用 Git 的咱们来讲,很是有必要掌握一些经常使用底层的 Git 命令,使用这些命令,和图形 IDE 一块儿使用,很是的高效。github
Git 的操做命令众多,这里记录了平常开发中 95% 常用的命令。缓存
$ git --config
安全
这个是对 Git 进行配置的命令,专门用来配置和读取相应的工做环境变量,正式由于这些变量,决定了 Git 在工做时候的工做方式和行为,分为系统级配置、用户级配置、项目级配置,根据配置的等级,这些变量存放在三个不一样位置位置:bash
这三个的优先级是依次增高的,对于相同的配置信息,后者的配置会覆盖前者。服务器
常见的配置信息有, 用来配置 git 提交时候的用户名和邮箱app
// 配置用户名
$ git config --global user.name "zhulei"
// 配置邮箱
$ git config --global user.email zhuleineuq@gmail.com
// 修改这个项目的git信息,很经常使用
$ git config --local user.name "zhulei"
$ git config --local user.email zhuleineuq@gmail.com
复制代码
有时候咱们要检查已有项目的配置信息,可使用以下命令:分布式
$ git config --list
// 显示这个项目的 git 信息
$ git config --local --list
// 显示用户的 git 信息
$ git config --global --list
复制代码
若是出现每次 git pull
或者 git push
都要输入帐号和密码,能够用下面命令在本地保存密码:ide
$ git config credential.helper store
复制代码
$ git --init
工具
若是一个项目不是 Git 工程,可使用这个命令把这个项目初始化,变成 GIt 工程
$ git init // 初始化仓库
$ git add *.c // 向git中添加文件
复制代码
$ git clone
例如在远程已经有一个 git项目,咱们想把它拷贝到本地,可使用这个命令, 例如 github 上面,一个项目的地址是 https://github.com/tangyxgit/FFmpegVideo.git
// 代码拷贝到本地
$ git clone https://github.com/tangyxgit/FFmpegVideo.git
// 拷贝的同时改一个名字
$ git clone https://github.com/tangyxgit/FFmpegVideo.git MyFFmpegVideo
复制代码
$ git status
检查文件的状态
$ git commit
提交代码,后面 -m 指此次提交包含的信息
$ git commit -m 'message'
复制代码
$ git log
查看提交记录
$ git remote
操做远程仓库
// 只能够看到仓库的名字
$ git remote
// 能够查看到仓库的名字和对应的地址
$ git remote -v
// 远程仓库的重命名
$ git remote rename pb paul
// 远程仓库的删除
$ git remote rm paul
// 添加远程仓库
$ git remote add origin git://github.com/paulboone/ticgit.git
复制代码
$ git fetch [remote-name]
从远程仓库中拉取数据,若是本地没有该分支,则直接拉下来,若是是本地已经存在的分支,例如origin,则是把最新的代码拉下来,可是这个时候并不合并处理
$ git pull
git pull 命令自动抓取数据下来,而后将远端分支自动合并到本地仓库中当前分支
$ git push
推送数据到远程仓库
远程分支:咱们用 (远程仓库名)/(分支名) 这样的形式表示远程分支。好比咱们想看看上次同 origin 仓库通信时 master 分支的样子,就应该查看 origin/master 分支
在推送前,可使用 $ git remote -v 能够查看到仓库的名字和对应的地址
// 推送到 地址是 origin 的 master 分支
$ git push origin master
// 将本地代码强制推到远程,也就是用本地代码覆盖远程, 本地回退,而后也想服务端同步本地回退,能够用这个
$ git push -f origin master
复制代码
$ git branch
操做分支
// 建立新的分支
$ git branch testing
// 删除分支
$ git branch -d hotfix
// 查看本地分支,注意看分支前面有 * 字符的,表示当前所在的分支
$ git branch
// 查看全部远程分支名字
$ git branch -r
// 查看全部分支名字,包括本地分支
$ git branch -a
复制代码
$ git checkout
切换分支
// 切换分支
$ git checkout testing
// 建立分支并切换
$ git checkout -b iss53
// 跟踪远程分支:在经过跟踪远程分支建立的本地分支里,能够直接使用 git pull 和 git push来进行拉和推的操做
$ git checkout --track
复制代码
$ git merge
合并分支
$ git merge hotfix
// 中断 merge
$ git merge --abort
复制代码
$ git rebase
分支的衍合
把一个分支中的修改整合到另外一个分支的办法有两种:merge 和 rebase.有了 rebase 命令,就能够把在一个分支里提交的改变移到另外一个分支里重放一遍。
// 找到两个分支的共同点,把当前分支在共同点以后的变化,在master当前所在位置从新执行一遍
$ git rebase master
// 这个命令比较复杂,由于当前是在 client 内,因此是取出 client 分支,找出 client 分支和 server 分支的共同祖先以后的变化,而后把它们在 master 上重演一遍
$ git rebase --onto master server client
复制代码
$ git reset
先使用 git log 查看序号
// 直接回滚到这个节点,不保留更改
$ git reset --hard f13210f0cdcc1fd27009d953edc0a23f65e6f2a9
// 回滚到这个节点,保留修改,通常是从新提交代码使用
$ git reset --soft f13210f0cdcc1fd27009d953edc0a23f65e6f2a9
复制代码
$ git tag
$ git tag // 显示当前分支全部的 tag
$ git tag -l '2.0.*' // 对结果进行模糊匹配过滤
$ git tag 2.0.8 // 打一个简单tag
$ git tag -a 2.0.8 -m 'tag message' // 带 Message 的tag
$ git show 2.0.7 // 显示这个 tag 的详细信息
graypn@Graypn:~/Code/Project_LongGe/apollo$ git show 2.0.7
tag 2.0.7
Tagger: zhulei <zhuleineuq@gmail.com>
Date: Thu Aug 31 11:54:38 2017 +0800
2.0.7正式版本
commit a1ca647e43dff98d8879563b8492c75bf6ae3fd6
Author: zhulei <zhuleineuq@gmail.com>
Date: Thu Aug 31 09:42:31 2017 +0800
$ git tag -a v1.2 9fceb02 // 后期根据某个提交补上tag
1.首先用 $ git log --pretty=oneline 显示简要的git提交信息,以下:
aa4d54677ee33ff72b9a3e81663a2c59657f2a0b feat:提高版本号
670c59f5e1f7cbd0e40310e6201b6a92284f5b3d fix:修复一个产品id传递的问题
a1ca647e43dff98d8879563b8492c75bf6ae3fd6 feat:提高版本号
2.而后用 git tag -a [tag] [完整提交号或者前几位] 补上 tag
$ git push origin 2.0.8 // 默认状况下,git push 并不会把标签传送到远端服务器上,只有经过显式命令才能分享标签到远端仓库。其命令格式如同推送分支,运行 git push origin [tagname]
也能够用 $ git push origin --tags 推上去全部的 tag
$ git tag // 查看本地全部tag
$ git tag v1 // 打tag
$ git tag -a v1 -m '描述'
$ git push --tags 或者 $ git push origin --tags// 推送tag到服务端
$ git show v1 // 查看某一个具体 tag 的详情
$ git reset --hard d5a65e 回退到某一次提交
$ git reset --hard HEAD 回退到上次提交
复制代码
$ git stash
把当前未提交的代码压入一个缓存栈内
使用场景:当前正在一个分支上进行开发时候,须要切换到另外一个分支作一些操做,这个时候能够先用 git stash把当前操做缓存起来,再切换到另外一个分支进行操做,操做完成后再切换回来,而后用 $ gtit stash apply
把上次缓存的代码取出来。
$ git stash list
看到全部缓存栈内的缓存记录。
使用场景:在多个分支使用 $git stash
后,使用 $git stash apply
获取上次缓存的操做已经不适用了,这个时候须要用 $git stash list
看全部缓存的记录:
stash@{0}: WIP on btzz_1.3.1: a8a0560 feature-白条1.3.2
stash@{1}: WIP on feature-kexin: d755dc5 feature-氪信原生埋点
stash@{2}: WIP on btzz_1.3.1: 71450ab feature-白条原生首页和超市UI改版
stash@{3}: WIP on feature-kexin: 7cc1a73 2.3.2
stash@{4}: WIP on feature_user_center: c56bdeb feature-关于咱们原生页面
stash@{5}: WIP on feature_user_center: 1e21336 feature-我的中心原生UI
stash@{6}: WIP on release-btzz-1.3.0: 8814922 Merge remote-tracking branch 'origin/master' into release-btzz-1.3.0
stash@{7}: On master: Uncommitted changes before Update at 2017/11/3 下午2:25
stash@{8}: WIP on master: f45170d fix-修复线上几个bug
复制代码
$ gtit stash
$ gtit stash apply
$ git stash list
复制代码
拉取分支
$ git clone git://github.com/schacon/grit.git mygrit
复制代码
修改在项目中的用户名和邮箱地址
$ git config --local --list //显示这个项目的git信息
$ git config --local user.name "John Doe"
$ git config --local user.email johndoe@example.com
复制代码
查看分支的状态
$ git status
复制代码
提交代码
$ git commit -m 'message'
复制代码
查看远程的分支详细状况,包括本地分支 push 和 pull 操做对应的目标分支
$ git remote show origin
复制代码
修改仓库地址
方式一:直接修改
$ git remote set-url origin http://xxxx.git
方式二:先删除后添加
$ git remote remove xxx
$ git remote add xxx
复制代码
切换到 develop 分支并更新到最新
$ git checkout develop
$ git pull
复制代码
建立本地分支
$ git checkout -b develop_xxx
复制代码
推送到远程主机,在远程主机建立新分支, 并跟踪
git branch --set-upstream-to origin/feature-talkback
复制代码
你应该始终牢记,你能够在任什么时候间执行撤销操做,并返回到你开始合并以前的状态。要对本身有信心,你不会破坏项目中的任何东西。只要在命令行界面中键入 git merge --abort
命令,你的合并操做就会被安全的撤销。
当你解决完冲突,而且在合并完成后发现一个错误,你仍然仍是有机会来简单地撤销它。你只需要键入 git reset --hard
命令,系统就会回滚到那个合并开始前的状态,而后从新开始吧!
git merge --abort
复制代码