git 资料整理

Git资料整理

在这里,我整理的并非不少,你们能够稍微借鉴一下就好,git命令用得好能够偷点懒罢了。

操做流程

一图胜千言,你经常使用的几个命令大概就是这样的。这是阮一峰给出的样子:
git 基本概念关系图html

官方git-scm是这样的:
git districts
只代表了通常的git本地操做流程:node

  1. 在工做目录中修改文件
  2. 暂存文件,将文件的快照放入暂存区域
  3. 提交更新,找到暂存区域的文件,将快照永久性存储到git仓库目录

命令清单

配置

.gitconfig配置文件,能够是电脑上的全局配置,或者项目目录下的项目配置
git config --list用于查看全局配置
我电脑上是log出:jquery

credential.helper=osxkeychain
user.email=nanci_guo@xinyan.com
user.name=guonanci
push.default=matching
alias.s=status
alias.t=tag
alias.ck=checkout
alias.cm=commit
alias.ps=push
alias.pl=pull
alias.d=diff
alias.l=log
alias.rs=reset
alias.rv=revert
alias.m=merge
alias.unstage=reset HEAD --
alias.last=log -1 HEAD
url.https://.insteadof=git://
last.unstage=log -1 HEAD
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
core.ignorecase=true
core.precomposeunicode=true
remote.origin.url=git@gitlab.xinyan.com:spider/SDK_H5.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master

大家在windows也试试,大体应该差很少git

增长删除文件

# 添加指定文件/目录到暂存区
$ git add [file1] [dir1] [file2] ...

代码提交

git commit -m [msg]是提交暂存区到仓库区,git commit [file1] [dir1] [file2] ... -m [msg]是提交暂存区的指定文件到仓库区,git commit -a是提交工做区自上次commit以后的变化,直接到仓库区,git commit --amend -m [msg]是使用一次新的commit,替代上一次提交,若是代码没有任何变化,则用来改写上一次commit的提交信息,`git commit --amend [file1] [file2]是重作一次commit,并包括指定文件的新变化,其实若是不太注重commit message的话,--amend这个标志位几乎没什么用了。github

分支

// 列出全部本地分支
git branch
// 列出全部远程分支
git branch -r
// 列出全部本地和远程分支
git branch -a
// 新建一个分支,但依然停留在当前分支
git branch [new-branch-name]
// 从指定分支新建一个分支,切换到新分支,与同名远程分支创建追踪关系
git checkout -b [new-branch-name] [base-branch-name:可选] && git push -u origin [new-branch-name]
// 合并指定分支到当前分支
git merge [branch-to-merge]
// 删除本地和远程的同名分支, 
git branch -d [branch-name] && git push origin :[branch-name]

查看信息

// 显示有变动的文件
git status
// 显示暂存区和工做区的差别
git diff
// 显示工做区和当前分支最新commit之间的差别
git diff HEAD
// 显示指定文件的每一行代码是谁在哪一个时间改过,信息有点多哦。。
git blame [file]

远程同步

// 下载远程仓库的全部变更
git fetch [remote]
// 显示全部远程仓库
git remote -v
// 显示某个远程仓库的信息
git remote show [remote]
// 增长一个新的远程仓库,并命名
git remote add [shortname] [url]
// 取回远程仓库的变化,并与本地分支合并
git pull [remote] [branch]
// 上传本地指定分支到远程仓库
git push [remote] --force
// 推送全部远程分支到远程仓库
git push [remote] --all

撤销

// 恢复暂存区的指定文件到工做区,我常常用
git checkout [file1] [dir1] ... 
// or 
git checkout .
// 重置暂存区的指定文件,与上一次的commit保持一致,但工做区不变
git reset [file]
// 重置当前分支的HEAD为指定commit,同时重置暂存区与工做区,与指定commit保持一致
git reset --hard [comit-log]

// 新建一个commit,用来撤销指定commit,后者的全部变化都被前者抵消,而且应用到当前分支
git revert [commit]

git 远程操做

git clone,git remote

// ssh,https,git,本地协议都支持,git协议下载最快
git clone [版本库url] [本地目录名:可选]

// git remote 用于管理主机名,不带选项的时候,git remote列出全部远程主机

git remote // origin 
// -v 选项能够查看主机网址
git remote -v
origin git@gitlab.xinyan.com:spider/SDK_H5.git (fetch)
origin git@gitlab.xinyan.com:spider/SDK_H5.git (push) 

// 克隆版本库的时候,所使用的远程主机自动被git命名为origin,若是想用其余的主机名,须要用git clone命令的-o选项指定
git remote -o jQuery htttps://github.com/jquery/jquery.git
git remote
jQuery

// 能够查看该主机的详细信息
git remote show <host-name> 
// 添加
git remote add <host-name> <url>

// 删除
git remote rm <host-name>
// 更名
git remote rename <old-name> <new-name>

git fetch

一旦远程主机的版本库有了commit更新, 须要将这些更新取回本地,用到git fetch <remote-host>
git fetch命令一般用来查看其余人的进程,由于她取回的代码对你本地的开发代码没有影响。默认状况下,git fetch取回全部分支的更新。若是只想取回特定分支的更新,能够指定分支名:git fetch <remote-host> <branch-name>。所取回的更新,须要在本地主机上用"远程主机名/分支名"的形式读取。数据库

git pull

取回远程主机某个分支的更新,再与本地的指定分支合并git pull <remote-host> <remote-branch>:<local-branch>。若是远程分支与当前分支合并,则冒号后面的部分能够省略:vim

git pull origin next

git fetch origin
git merge origin/next

在某些场合,git会自动在本地分支和远程分支之间,创建追踪关系tracking,好比在git clone的时候,全部本地分支默认与远程主机的同名分支创建追踪关系
也容许手动创建追踪关系:git branch --set-upstream master origin/next
若是当前分支远程分支存在追踪关系,git pull就能够省略远程分支名:git pull origin,若是当前分支只有一个追踪分支,连远程主机名均可以省略:git pull,上面命令表示,当前分支自动与惟一一个追踪分支进行合并。windows

若是远程主机删除了某个分支,默认状况下git pull的时候不会在拉取远程分支的时候删除对应的本地分支,是为了防止因为其余人操做了远程主机致使git pull不知不觉删除了本地分支,固然能够加上选项 -p就会在本地删除远程已经删除的分支:bash

git pull -p 
// or 
git fetch --prune origin
git fetch -p

git push

用于将本地分支的更新推送到远程主机,格式与git pull命令相仿:服务器

git push <remote-host> <local-branch>:<remote-branch>

分支推送的顺序是<from>:<to>git pull对应<remote-branch>:<local-branch>git push对应<local-branch>:<remote-branch>,若是省略远程分支名,则表示将本地分支推送与之存在“追踪关系”的远程分支(一般二者同名),若是该远程分支不存在,则会被新建。git push origin master,上面命令表示将本地的master分支推送到origin主机的master分支。
若是省略本地分支名,则表示删除指定的远程分支,等同于推送一个空的本地分支到远程分支。

git push origin :master
// or 
git push origin --delete master

若是当前分之与远程分支之间存在追踪关系,则本地分支和远程分支均可以省略:git push origin
若是当前分支只有一个追踪分支,那么主机名均可以省略:git push

若是当前分支与多个主机之间存在追踪关系,则可使用-u选项指定一个默认主机,这样后面就能够不加任何参数使用git push了: git push -u origin master。不带任何参数的git push默认只推送当前分支,叫作simple方式,此外还有一种matching方式
,如今默认使用simple方式,若是要修改,采用git config --global push.default matching/simple,还有就是不论是否存在对应的远程分支,都会推送到远程主机,须要使用 --all选项:git push --all origin,若是要推送标签,要加上--tags选项:git push origin --tags

git 进阶

git 特色

近乎全部操做都只是本地执行

好比说要浏览项目的历史,git不须要外联到服务器去获取历史,只须要直接从本地数据库中读取。

git保证完整性

git中全部数据在存储前都计算校验和,而后以校验和来引用。意味着不可能在git不知情时更改文件内容或者目录内容。这个功能构建在git底层。是构成git哲学不可或缺的部分,若是在传输过程当中丢失信息或者损坏文件,git就能发现。
git用以计算校验和的机制叫作SHA-1散列(哈希hash),他是一个由40个十六进制字符(0-9和a-f)组成字符串,基于git中文件的内容或者目录结构计算出来。

进阶部分很差整理,有点多,难度比较大,你们能够本身稍微看看我推荐的progit.zh.pdf 还有 git-scm中文文档,不过说到底git只是个工具,遇到问题能够及时解决就行。

提高效率的工具方面

其实本身手打也差很少, 能够利用以前说起的git config --list里面的alias,好比:
git pl && git add . && git cm -m "commit message" && git ps; && 符号是说上一条命令执行成功才会执行下一条
Mac上有oh-my-zsh这个很方便的命令行alias全局配置工具,还有iterm2终端app,
参考下面的文章:
item2安装及使用
oh-my-zsh安装
oh-my-zsh配置

我在项目里面配置了ci.sh 和 test.sh prd.sh 能够用于平常的提交代码,推送到test分支发布测试环境,推送到prd分支发布生产环境。windows的话推荐强大的Cygwin这里也有一篇有关Cygwin的短文,

windows上我找到这篇文章,特别短,主要是alias方面。

不过我以为若是你的IDE自带终端还有git操做比较方便的话仍是用IDE吧,不用命令行也能够。
若是用命令行的话,推荐git-bash这里有篇短文,推荐一下。

参考资料

书籍 文档 连接
progit.zh.pdf git-scm.com/book 阮一峰-经常使用git命令清单
相关文章
相关标签/搜索