在这里,我整理的并非不少,你们能够稍微借鉴一下就好,git命令用得好能够偷点懒罢了。
一图胜千言,你经常使用的几个命令大概就是这样的。这是阮一峰给出的样子:html
官方git-scm是这样的:
只代表了通常的git本地操做流程:node
.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]
// 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>
一旦远程主机的版本库有了commit更新, 须要将这些更新取回本地,用到git fetch <remote-host>
git fetch命令一般用来查看其余人的进程,由于她取回的代码对你本地的开发代码没有影响。默认状况下,git fetch取回全部分支的更新。若是只想取回特定分支的更新,能够指定分支名:git fetch <remote-host> <branch-name>
。所取回的更新,须要在本地主机上用"远程主机名/分支名"的形式读取。数据库
取回远程主机某个分支的更新,再与本地的指定分支合并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 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用以计算校验和的机制叫作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命令清单 |