Git安装配置及常用命令

  1. 官网下载安装包,手动完成安装。
  2. 打开Git Bash命令行工具,执行命令ssh-keygen -t rsa -C Email-Addresss生成一个密钥对。
  3. 登录到GitLab,点击右上角你的用户头像,点击Edit Profile settings,点击SSH Keys,点击Add SSH Key,填写Title栏,复制用户目录下.ssh/id_rsa.pub文件的内容到Key,点击Add Key
  4. 点击右上角的New project,填写完成后点击Create project新建一个仓库,点击Activity,点击SSH后复制SSH边上栏里的地址。
  5. 打开Git Bash命令行工具,切换到一个合适的目录,使用命令git clone '刚才复制的URL'克隆创建的仓库。
  6. 进入目录cd 仓库名,执行命令
    git config --global user.email your-email,设置你的邮箱
    git config --global user.name your-name,设置你的姓名。
  7. 执行命令:
    echo "# Description" > README.md,添加一个文件
    git status,查看当前状态,发现有未跟踪文件
    git add .,当前目录所有文件添加到暂存区
    git diff,比较当前工作区和暂存区有何不同
    git status,查看当前状态,发现有文件未提交
    git commit -m "注释",把暂存区内容提交到本地仓库
    git push -u origin master,把本地仓库的提交推送到远程仓库
    git log,查看提交日志
  8. 模拟远程更新
    登录到GitLab,点击Files标签,点击README.md文件,点击Edit按钮修改文件内容,添加新行:”* 远程修改文件记录”,可以点击Preview预览,也可以填写注释后直接保存。
  9. 执行命令:
    git pull,拉取远程仓库的更新提交,并做自动合并,可能会出现冲突
    git fetch,获得远程仓库的更新提交,不做自动合并,需要手动合并
    git merge origin/master,把远程更新提交手动合并到本地master分支
  10. 配置命令别名
    git config --global alias.co checkout,配置检出命令别名
    git config --global alias.br branch,配置分支命令别名
    git config --global alias.ci commit,配置提交命令别名
    git config --global alias.st status,配置当前状态命令别名
    git config --global alias.df diff,配置比较命令别名
    git config --global alias.pl pull,配置拉取命令别名
    git config --global alias.pu push,配置推送命令别名
    git config --list,查看配置列表
    git config --global credential.helper store,配置记住密码,以HTTPS使用时
  11. 其它命令
    git clean -f,清空未跟踪文件
    git checkout .,清空工作区改动
    git checkout some-branch-name file-name.js,检出指定分支的指定文件
    git checkout {{some-commit-hash}} file-name.js,检出指定提交的指定文件
  12. 其它
  • Git管理大项目一段时间后会比较慢,可以使用git gc命令清理一下
  • Git不管理空目录,如果本地有空目录,则始终不会提交到仓库中
  • Git会根据文件的相似性自动识别重命令名操作,底层其实也是先delete后add
  • 可在.git同级目录添加.gitignore文件,文件中可写入忽略文件信息,查看状态和提交时均会自动忽略
  • 1.7版好像支持了像svn那样只检出部分目录的功能,详细请移步官网文档,另附Git稀疏检出教程一例
  • 推荐官方书籍:Pro Git
  • 官方手册地址请戳我,注:git help 'command'显示的就是官方手册Manual Page.
  • 还有一些其它功能,比如:rebase, rm, reset, remote, blame, cherry-pick, mergetool, difftool等本教程还没涉及,以后会逐步更新

Git本地分支管理

  1. 分支的创建、合并、删除、比较
    git branch,显示所有分支
    git branch b1,从当前分支创建一个叫b1的分支
    git checkout b1,切换到b1分支
    git checkout -b b1,相当于以上两条命令的组合
    git checkout master,切换到master主分支
    git merge b1,把b1分支的代码合并到master上
    git branch -d b1,删除b1分支,不能在被删除分支上执行
    git diff branch-1 branch-2,比较两个分支的不同
    git diff --name-only branch-1 branch-2,只显示两分支不同的文件的名称
    git diff some-branch some-filename.js,比较当前分支与另一分支指定文件

Git远程分支管理

  1. 远程分支的创建、合并、删除
    git push origin dev,将本地分支dev推送到origin远程仓库
    git pull origin dev,拉取远程仓库origin的dev分支并自动合并
    git push orgin :dev,删除远程仓库origin上的远程分支
    git push origin --delete dev,1.7版之后可以使用这个命令。
    git remote prune origin,清理本地的跟踪分支,可加—dry-run参数假执行一下
    git pull --rebase,以变基的形式拉取更新

Tips : tag的远程管理类似远程分支管理


Git Tag标签管理

  1. 标签的创建、删除
    git tag t1,从当前分支创建一个名为t1的标签
    git tag -m '注释' t1,创建一个带有注释的标签
    git tag -d t1,删除名为t1的标签

Git Log日志

git log,查看历史日志
git log --graph,以基于文本的图形显示合并轨迹
git log --pretty=oneline,一行显示日志简要信息
git log --pretty=format:"%h - %an, %ar : %s",以指定格式查看日志,format参数请移步官方手册
git log --pretty="%h - %s" --author=gitster --since="2008-10-01" --before="2008-11-01" --no-merges,以指定格式显示指定日期区间和指定提交者的日志,不含合并提交
git log -p -2 --stat,-p显示文件差异,-2显示最近两次提交,—stat显示修改行数统计信息
git log -p filename,查看文件的详细变更,包括文件的实际修改内容
git log -L 1,1:some-file.txt,查看文件中指定位置的变更
git log --no-merges master..,查看尚未合并到master分支的变更


其它高级命令

git show --no-merges master..,功能同上
git show some-branch:some-file.js,查看其它分支的文件,无需切换分支

常规使用及介绍

角色权限

角色 权限 备注
Owner 项目所有者,拥有所有的操作权限 最高权限
Master 项目的管理者,除更改、删除项目元信息外其它操作均可 负责master等受保护分支的merge工作等
Developer 项目的开发人员,做一些开发工作,对受保护内容无权限 可以创建远程分支,创建merge请求, 接受merge请求?
Reporter 项目的报告者,只有项目的读权限,可以创建代码片断 不能创建远程分支, 创建merge请求?
Guest 项目的游客,只能提交问题和评论内容 只能issue等

具体请看官方文档:https://docs.gitlab.com/ee/user/permissions.html


分支定义

分支名称 定义 人员 环境 保护分支 稳定分支
master 主分支 顶级负责人Master 生产环境
r-预发布版本号 预发布分支 顶级负责人Master 预发布环境
dev 开发分支 项目负责人Master 测试环境
b-BUG编号 Bug修复分支 开发者Developer 测试环境
f-特性名称 特性分支 开发者Developer 开发环境
f-特性名称-coder 特性分支-开发者 开发者Developer 开发环境
t-发布版本号 发布版本标签 all all

一般使用方法

1. 克隆

git clone <仓库地址>

2. 查看所有分支

git branch -a
# 查看是否有origin/dev分支,服务器默认已建立dev分支,如果没有,则请Master角色先建立该分支:
# 方法1:clone版本哭,新建本地dev分支并push到服务器:git clone ; git branch dev ; git checkout dev ; git push。
# 方法2:直接在gilab上建立dev分支

" style="border: 0px; display: block;font-family: Consolas, Inconsolata, Courier, monospace; font-weight: bold; white-space: pre; margin: 0px;border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-wrap: break-word; border: 1px solid rgb(204, 204, 204); padding: 0px 5px; margin: 0px 2px;font-size: 1em; letter-spacing: -1px; font-weight: bold;">git branch -a
# 查看是否有origin/dev分支,服务器默认已建立dev分支,如果没有,则请Master角色先建立该分支:
# 方法1:clone版本哭,新建本地dev分支并push到服务器:git clone ; git branch dev ; git checkout dev ; git push。
# 方法2:直接在gilab上建立dev分支

3. 切换到dev分支

git checkout dev    #--- 可能是git checkout -b dev origin/dev,建立进入分支,并关联

" style="border: 0px; display: block;font-family: Consolas, Inconsolata, Courier, monospace; font-weight: bold; white-space: pre; margin: 0px;border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-wrap: break-word; border: 1px solid rgb(204, 204, 204); padding: 0px 5px; margin: 0px 2px;font-size: 1em; letter-spacing: -1px; font-weight: bold;">git checkout dev #--- 可能是git checkout -b dev origin/dev,建立进入分支,并关联

4. 基于dev分支创建自己的分支<分支名称>

git checkout dev
git branch &lt;分支名称&gt;

" style="border: 0px; display: block;font-family: Consolas, Inconsolata, Courier, monospace; font-weight: bold; white-space: pre; margin: 0px;border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-wrap: break-word; border: 1px solid rgb(204, 204, 204); padding: 0px 5px; margin: 0px 2px;font-size: 1em; letter-spacing: -1px; font-weight: bold;">git checkout dev
git branch <分支名称>

5. 切换到<分支名称>,然后愉快的coding

git checkout  &lt;分支名称&gt;

" style="border: 0px; display: block;font-family: Consolas, Inconsolata, Courier, monospace; font-weight: bold; white-space: pre; margin: 0px;border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-wrap: break-word; border: 1px solid rgb(204, 204, 204); padding: 0px 5px; margin: 0px 2px;font-size: 1em; letter-spacing: -1px; font-weight: bold;">git checkout <分支名称>

6. 加到暂存区

git add ./

" style="border: 0px; display: block;font-family: Consolas, Inconsolata, Courier, monospace; font-weight: bold; white-space: pre; margin: 0px;border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-wrap: break-word; border: 1px solid rgb(204, 204, 204); padding: 0px 5px; margin: 0px 2px;font-size: 1em; letter-spacing: -1px; font-weight: bold;">git add ./

7. 可随时检查工作区状态

# 查看当前分支工作区是否有未跟踪的文件(即是否有未添加到暂存区的文件)
git status
# 查看当前分支工作区的文件与暂存区文件的差异
git diff

" style="border: 0px; display: block;font-family: Consolas, Inconsolata, Courier, monospace; font-weight: bold; white-space: pre; margin: 0px;border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-wrap: break-word; border: 1px solid rgb(204, 204, 204); padding: 0px 5px; margin: 0px 2px;font-size: 1em; letter-spacing: -1px; font-weight: bold;"># 查看当前分支工作区是否有未跟踪的文件(即是否有未添加到暂存区的文件)
git status
# 查看当前分支工作区的文件与暂存区文件的差异
git diff

8. 提交到本地仓库

git commit -m "说明"

" style="border: 0px; display: block;font-family: Consolas, Inconsolata, Courier, monospace; font-weight: bold; white-space: pre; margin: 0px;border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-wrap: break-word; border: 1px solid rgb(204, 204, 204); padding: 0px 5px; margin: 0px 2px;font-size: 1em; letter-spacing: -1px; font-weight: bold;">git commit -m "说明"

9. 推送到服务器仓库

也可以不推送到服务器,只放在本地仓库,例如仅本人使用的临时分支

git push --set-upstream origin &lt;分支名称&gt;     #--- 设置关联,也会顺便推送,仅在第一次时用
git push origin

" style="border: 0px; display: block;font-family: Consolas, Inconsolata, Courier, monospace; font-weight: bold; white-space: pre; margin: 0px;border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-wrap: break-word; border: 1px solid rgb(204, 204, 204); padding: 0px 5px; margin: 0px 2px;font-size: 1em; letter-spacing: -1px; font-weight: bold;">git push --set-upstream origin <分支名称> #--- 设置关联,也会顺便推送,仅在第一次时用
git push origin

10. 合并到dev分支(例)

A. Developer在网页上请求合并(推荐)

网页上请求合并还可以顺便进行代码审查,里程碑设置等
参考:
gitlab如何实现代码评审机制(通过角色管理控制): http://www.jianshu.com/p/adb598c52e84


如果出现冲突,开发人员将服务器最新的版本pull下来,然后将dev分支合并到自己的分支

git pull
git checkout &lt;分支名称&gt;
git merge --no-ff dev

" style="border: 0px; display: block;font-family: Consolas, Inconsolata, Courier, monospace; font-weight: bold; white-space: pre; margin: 0px;border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-wrap: break-word; border: 1px solid rgb(204, 204, 204); padding: 0px 5px; margin: 0px 2px;font-size: 1em; letter-spacing: -1px; font-weight: bold;">git pull
git checkout <分支名称>
git merge --no-ff dev

如果有冲突,则参照上面的参考链接解决,或直接按【B. Master角色直接本地合并】中的方法解决

B. Master角色直接本地合并

dev是保护分支,只有Master角色(例,看设置的分支保护权限)才有权限进行合并
将本地分支<分支名称>合并到本地dev分支,必须先从服务器pull最新代码,并切换到dev分支,然后再合并:

git pull  &lt;仓库地址&gt;
git checkout dev
git merge --no-ff &lt;分支名称&gt;

" style="border: 0px; display: block;font-family: Consolas, Inconsolata, Courier, monospace; font-weight: bold; white-space: pre; margin: 0px;border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-wrap: break-word; border: 1px solid rgb(204, 204, 204); padding: 0px 5px; margin: 0px 2px;font-size: 1em; letter-spacing: -1px; font-weight: bold;">git pull <仓库地址>
git checkout dev
git merge --no-ff <分支名称>

运行merge命令之后,如果有冲突,则需要手动解决冲突,打开冲突文件,你可以看到类似:

。。。
111
&lt;&lt;&lt;&lt;&lt;&lt;&lt; HEAD
222 master do it
=======
222 source do it
333 source jjj
&gt;&gt;&gt;&gt;&gt;&gt;&gt; &lt;分支名称&gt;
。。。

" style="border: 0px; display: block;font-family: Consolas, Inconsolata, Courier, monospace; font-weight: bold; white-space: pre; margin: 0px;border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-wrap: break-word; border: 1px solid rgb(204, 204, 204); padding: 0px 5px; margin: 0px 2px;font-size: 1em; letter-spacing: -1px; font-weight: bold;">。。。
111
<<<<<<< HEAD
222 master do it
=======
222 source do it
333 source jjj
>>>>>>> <分支名称>
。。。

将正确的留下,错误的删除即可,保存退出,然后重新(git add . ; git commit ; git merge ):

git add .
git commit -m "for merge说明"
git merge --no-ff &lt;分支名称&gt;

" style="border: 0px; display: block;font-family: Consolas, Inconsolata, Courier, monospace; font-weight: bold; white-space: pre; margin: 0px;border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-wrap: break-word; border: 1px solid rgb(204, 204, 204); padding: 0px 5px; margin: 0px 2px;font-size: 1em; letter-spacing: -1px; font-weight: bold;">git add .
git commit -m "for merge说明"
git merge --no-ff <分支名称>

冲突时,也可以撤销合并:

git merge --abort

" style="border: 0px; display: block;font-family: Consolas, Inconsolata, Courier, monospace; font-weight: bold; white-space: pre; margin: 0px;border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-wrap: break-word; border: 1px solid rgb(204, 204, 204); padding: 0px 5px; margin: 0px 2px;font-size: 1em; letter-spacing: -1px; font-weight: bold;">git merge --abort

11. 删除分支,切换到master分支然后删除<分支名称>分支(不能删除当前分支)

git checkout master
git branch -d &lt;分支名称&gt;

" style="border: 0px; display: block;font-family: Consolas, Inconsolata, Courier, monospace; font-weight: bold; white-space: pre; margin: 0px;border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-wrap: break-word; border: 1px solid rgb(204, 204, 204); padding: 0px 5px; margin: 0px 2px;font-size: 1em; letter-spacing: -1px; font-weight: bold;">git checkout master
git branch -d <分支名称>

12. 删除远程,危险,切记只删除自己建立的分支,不要删除公共分支,例如dev、release等

git push origin :&lt;分支名称&gt;

" style="border: 0px; display: block;font-family: Consolas, Inconsolata, Courier, monospace; font-weight: bold; white-space: pre; margin: 0px;border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-wrap: break-word; border: 1px solid rgb(204, 204, 204); padding: 0px 5px; margin: 0px 2px;font-size: 1em; letter-spacing: -1px; font-weight: bold;">git push origin :<分支名称>

GitLab介绍及常规使用

GitLib有五种身份权限,分别是:

  • Owner 项目所有者,拥有所有的操作权限
  • Master 项目的管理者,除更改、删除项目元信息外其它操作均可
  • Developer 项目的开发人员,做一些开发工作,对受保护内容无权限
  • Reporter 项目的报告者,只有项目的读权限,可以创建代码片断
  • Guest 项目的游客,只能提交问题和评论内容

具体参见GitLab权限,为项目添加成员时可指定成员的身份权限。


命名规则

  • 每次提交必须写明注释,如果是修复Bug,请加上Bug号
  • 创建特性分支,名称要以f-开头,加上特性名
  • 创建发布分支,名称要以r-开头,加上预发布版本号
  • 创建Bug修复分支,名称要以b-开头,加上Bug号
  • 创建标签,名称要以t-开头,加上发布版本号
  • 合并分支时必须使用--no-ff参数(禁止以快进方式合并),以保留合并历史轨迹

主要分支(保护分支)

  • master 主分支,稳定代码,为生产环境做准备的
  • develop 开发分支,为开发服务

特性分支

从develop分支创建,用于特性开发,完成后要合并回develop分支。
操作过程:
git checkout -b newfeature develop,从develop分支创建newfeature特性分支
git checkout develop,开发完成后,需要合并回develop分支,先切换到develop分支
git merge --no-ff newfeature,合并回develop分支,必须加--no-ff参数
git branch -d newfeature,删除特性分支
git push origin develop,把合并后的develop分支推送到远程仓库


发布分支

从develop分支创建,用于预发布版本,允许小bug修复,完成后要合并回develop和master。
操作过程:
git checkou -b release-1.2 develop,创建一个发布分支
git checkout master,切换到master分支,准备合并
git merge --no-ff release-1.2,把release-1.2分支合并到master分支
git tag 1.2,从master分支打一个标签
git checkou develop,切换到develop分支,准备合并
git merge --no-ff release-1.2,把release-1.2分支合并到develop分支
git branch -d release-1.2,删除这个发布分支


修复分支

从master分支创建,用于生产环境上的Bug修复,完成后要合并回develop和master。
操作过程:
git checkout -b hotfix-1.2.1 master,从master分支创建一个Bug修复分支
git checkout master,切换到master分支,准备合并
git merge --no-ff hotfix-1.2.1,合并到master分支
git tag 1.2.1,为master分支创建一个标签
git checkout develop,切换到develop分支,准备合并
git merge --no-ff hotfix-1.2.1,合并到develop分支
git branch -d hotfix-1.2.1,删除hotfix-1.2.1分支

区别git与svn

开发者的本地?

svn: 只有一个版本的代码
git: 整个仓库的所有版本

" style="border: 0px; display: block;font-family: Consolas, Inconsolata, Courier, monospace; font-weight: bold; white-space: pre; margin: 0px;border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-wrap: break-word; border: 1px solid rgb(204, 204, 204); padding: 0px 5px; margin: 0px 2px;font-size: 1em; letter-spacing: -1px; font-weight: bold;">svn: 只有一个版本的代码
git: 整个仓库的所有版本

在没有网络的情况下, 开发还能不能进行版本控制

svn: 不可以, svn没有自我版本控制的能力
git: 可以的, git在本地就有一个仓库, 本地的版本控制

" style="border: 0px; display: block;font-family: Consolas, Inconsolata, Courier, monospace; font-weight: bold; white-space: pre; margin: 0px;border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-wrap: break-word; border: 1px solid rgb(204, 204, 204); padding: 0px 5px; margin: 0px 2px;font-size: 1em; letter-spacing: -1px; font-weight: bold;">svn: 不可以, svn没有自我版本控制的能力
git: 可以的, git在本地就有一个仓库, 本地的版本控制

最常用命令:

svn: checkout/commit/update
git: clone/add/commit/push/pull

" style="border: 0px; display: block;font-family: Consolas, Inconsolata, Courier, monospace; font-weight: bold; white-space: pre; margin: 0px;border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-wrap: break-word; border: 1px solid rgb(204, 204, 204); padding: 0px 5px; margin: 0px 2px;font-size: 1em; letter-spacing: -1px; font-weight: bold;">svn: checkout/commit/update
git: clone/add/commit/push/pull

git/github的常用操作

全局配置github用户名和邮箱

git config --global user.name "用户名"  //配置用户名
git config --global user.email "你的邮箱" //配置邮箱
git config --list //查看配置列表

" style="border: 0px; display: block;font-family: Consolas, Inconsolata, Courier, monospace; font-weight: bold; white-space: pre; margin: 0px;border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-wrap: break-word; border: 1px solid rgb(204, 204, 204); padding: 0px 5px; margin: 0px 2px;font-size: 1em; letter-spacing: -1px; font-weight: bold;">git config --global user.name "用户名" //配置用户名
git config --global user.email "你的邮箱" //配置邮箱
git config --list //查看配置列表

生成一个本地仓库

git init  //初始一个本地创建
git clone url //从远程克隆仓库到本地

" style="border: 0px; display: block;font-family: Consolas, Inconsolata, Courier, monospace; font-weight: bold; white-space: pre; margin: 0px;border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-wrap: break-word; border: 1px solid rgb(204, 204, 204); padding: 0px 5px; margin: 0px 2px;font-size: 1em; letter-spacing: -1px; font-weight: bold;">git init //初始一个本地创建
git clone url //从远程克隆仓库到本地

添加文件并提交

git add *  //将工作区的变化添加到缓存区
git commit -m "说明信息" //将缓存区的变化提交到版本区
git status // 查看状态

" style="border: 0px; display: block;font-family: Consolas, Inconsolata, Courier, monospace; font-weight: bold; white-space: pre; margin: 0px;border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-wrap: break-word; border: 1px solid rgb(204, 204, 204); padding: 0px 5px; margin: 0px 2px;font-size: 1em; letter-spacing: -1px; font-weight: bold;">git add * //将工作区的变化添加到缓存区
git commit -m "说明信息" //将缓存区的变化提交到版本区
git status // 查看状态

git在本地维护了3个区域

工作区(working dir)
缓存/暂存区(Index/Stage)
版本区(HEAD)

" style="border: 0px; display: block;font-family: Consolas, Inconsolata, Courier, monospace; font-weight: bold; white-space: pre; margin: 0px;border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-wrap: break-word; border: 1px solid rgb(204, 204, 204); padding: 0px 5px; margin: 0px 2px;font-size: 1em; letter-spacing: -1px; font-weight: bold;">工作区(working dir)
缓存/暂存区(Index/Stage)
版本区(HEAD)

push推送: 将本地仓库中的更新提交到远程仓库

git remote add origin url  //关联本地仓库与远程仓库(1次)
git push origin master //将本地仓库的更新推送到远程仓库

" style="border: 0px; display: block;font-family: Consolas, Inconsolata, Courier, monospace; font-weight: bold; white-space: pre; margin: 0px;border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-wrap: break-word; border: 1px solid rgb(204, 204, 204); padding: 0px 5px; margin: 0px 2px;font-size: 1em; letter-spacing: -1px; font-weight: bold;">git remote add origin url //关联本地仓库与远程仓库(1次)
git push origin master //将本地仓库的更新推送到远程仓库

pull拉取

git pull origin master  //拉取远程仓库的更新到本地仓库
注意: 自动合并

" style="border: 0px; display: block;font-family: Consolas, Inconsolata, Courier, monospace; font-weight: bold; white-space: pre; margin: 0px;border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-wrap: break-word; border: 1px solid rgb(204, 204, 204); padding: 0px 5px; margin: 0px 2px;font-size: 1em; letter-spacing: -1px; font-weight: bold;">git pull origin master //拉取远程仓库的更新到本地仓库
注意: 自动合并

git管理真实项目

1.添加忽略
创建.gitignore文件
vim .gitignore //通过vim命令创建文件
i //进入编辑模式
按esc //进入查看模式
ZZ //保存并退出
指定需要忽略的文件或文件夹
/.idea ##忽略当前目录下的此文件(夹)
node_modules ## 忽略任意目录下的此文件(夹)
2.本地版本控制
git add *
git commit -m "xxx"
3.创建github(远程)仓库
New Repository
VueSource
4.推送到远程仓库
git remote add origin https://github.com/zxfjd3g/VueSource.git
git push origin master

" style="border: 0px; display: block;font-family: Consolas, Inconsolata, Courier, monospace; font-weight: bold; white-space: pre; margin: 0px;border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-wrap: break-word; border: 1px solid rgb(204, 204, 204); padding: 0px 5px; margin: 0px 2px;font-size: 1em; letter-spacing: -1px; font-weight: bold;">1.添加忽略
创建.gitignore文件
vim .gitignore //通过vim命令创建文件
i //进入编辑模式
按esc //进入查看模式
ZZ //保存并退出
指定需要忽略的文件或文件夹
/.idea ##忽略当前目录下的此文件(夹)
node_modules ## 忽略任意目录下的此文件(夹)
2.本地版本控制
git add *
git commit -m "xxx"
3.创建github(远程)仓库
New Repository
VueSource
4.推送到远程仓库
git remote add origin https://github.com/zxfjd3g/VueSource.git
git push origin master

公司多人协同

new organization
查找小伙伴账号, 并添加
修改组织成员的访问权限为: write
向小伙伴发送organization名称/地址
小伙伴登陆后访问organization的地址, 同意协作请求
在组织下创建仓库, 所有小伙伴都可以对仓库进行clone/pull/push了

" style="border: 0px; display: block;font-family: Consolas, Inconsolata, Courier, monospace; font-weight: bold; white-space: pre; margin: 0px;border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-wrap: break-word; border: 1px solid rgb(204, 204, 204); padding: 0px 5px; margin: 0px 2px;font-size: 1em; letter-spacing: -1px; font-weight: bold;">new organization
查找小伙伴账号, 并添加
修改组织成员的访问权限为: write
向小伙伴发送organization名称/地址
小伙伴登陆后访问organization的地址, 同意协作请求
在组织下创建仓库, 所有小伙伴都可以对仓库进行clone/pull/push了

开源项目多人协同

用户A: 项目xxx
用户B: 用户A的下一级或朋友, 没有权限直接向仓库xxx push代码
B: 访问xxx主页, fork一个分支到B账户下
B: clone=&gt;修改代码==&gt;commit==&gt;push
B: pull request: 向A提交一个pull的请求
A: 接收到消息, 查看/diff/merge
AB: 可以进行发信息交流

" style="border: 0px; display: block;font-family: Consolas, Inconsolata, Courier, monospace; font-weight: bold; white-space: pre; margin: 0px;border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-wrap: break-word; border: 1px solid rgb(204, 204, 204); padding: 0px 5px; margin: 0px 2px;font-size: 1em; letter-spacing: -1px; font-weight: bold;">用户A: 项目xxx
用户B: 用户A的下一级或朋友, 没有权限直接向仓库xxx push代码
B: 访问xxx主页, fork一个分支到B账户下
B: clone=>修改代码==>commit==>push
B: pull request: 向A提交一个pull的请求
A: 接收到消息, 查看/diff/merge
AB: 可以进行发信息交流

git/github其它操作

fetch拉取

git fetch origin master:tmp
git diff tmp
git merge tmp : 将tmp分支合并到当前分支
需要手动合并后提交

" style="border: 0px; display: block;font-family: Consolas, Inconsolata, Courier, monospace; font-weight: bold; white-space: pre; margin: 0px;border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-wrap: break-word; border: 1px solid rgb(204, 204, 204); padding: 0px 5px; margin: 0px 2px;font-size: 1em; letter-spacing: -1px; font-weight: bold;">git fetch origin master:tmp
git diff tmp
git merge tmp : 将tmp分支合并到当前分支
需要手动合并后提交

其它的命令:

git log/reflog
git checkout commit_id &lt;file.name&gt; : 将指定文件回到指定版本
git reset --hard HEAD : 将整个工作区回到最新版本
git reset --hard HEAD^ : 回到上一个版本

" style="border: 0px; display: block;font-family: Consolas, Inconsolata, Courier, monospace; font-weight: bold; white-space: pre; margin: 0px;border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-wrap: break-word; border: 1px solid rgb(204, 204, 204); padding: 0px 5px; margin: 0px 2px;font-size: 1em; letter-spacing: -1px; font-weight: bold;">git log/reflog
git checkout commit_id <file.name> : 将指定文件回到指定版本
git reset --hard HEAD : 将整个工作区回到最新版本
git reset --hard HEAD^ : 回到上一个版本

在webstorm中使用git

在settings中配置关联上git.exe
使用git命令初始化本地仓库并与远程仓库关联
通过version control视窗直接进行版本控制操作

" style="border: 0px; display: block;font-family: Consolas, Inconsolata, Courier, monospace; font-weight: bold; white-space: pre; margin: 0px;border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-wrap: break-word; border: 1px solid rgb(204, 204, 204); padding: 0px 5px; margin: 0px 2px;font-size: 1em; letter-spacing: -1px; font-weight: bold;">在settings中配置关联上git.exe
使用git命令初始化本地仓库并与远程仓库关联
通过version control视窗直接进行版本控制操作

使用TortoiseGit

安装TortoiseGit
通过菜单进行git版本控制(不使用命令)
使用git SSH
利用TortoiseGit的PuTTY工具生成public Key, 并配置到github上
生成private key并保存为一个ppk文件
通过远程仓库的ssh地址clone, 并指定本地的ppk文件

" style="border: 0px; display: block;font-family: Consolas, Inconsolata, Courier, monospace; font-weight: bold; white-space: pre; margin: 0px;border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-wrap: break-word; border: 1px solid rgb(204, 204, 204); padding: 0px 5px; margin: 0px 2px;font-size: 1em; letter-spacing: -1px; font-weight: bold;">安装TortoiseGit
通过菜单进行git版本控制(不使用命令)
使用git SSH
利用TortoiseGit的PuTTY工具生成public Key, 并配置到github上
生成private key并保存为一个ppk文件
通过远程仓库的ssh地址clone, 并指定本地的ppk文件

Git常规命令参考自:http://www.07net01.com/2015/04/827369.html
结合 haroopad 玩 markdown模式编写 也不想象中的那么简单啊 …

最新文章

  1. 关于Javascript中通过实例对象修改原型对象属性值的问题
  2. javascript 百度地图API - demo
  3. 给大家推荐PYTHON网站
  4. Dubbo 分布式服务框架(spring、zookeeper)
  5. win7开防火墙,允许ping通
  6. sql行列转换
  7. mysql 指定端口
  8. Java基础知识强化12:Java中运用数组的四种排序方法
  9. Zend Studio 文件头和方法注释设置
  10. Xcode 5.1.1 与 Xcode 6.0.1 共存
  11. Impala源代码分析---1
  12. PHP环境搭建之PHPstorm9+PHP5开发环境配置
  13. python2.7 使用super关键词 报错 TypeError: must be type, not&amp;n
  14. python网络编程(进程与多线程)
  15. 六星经典CSAPP笔记(2)信息的操作和表示
  16. Django REST framework+Vue 打造生鲜超市(七)
  17. 手绘raft算法
  18. window安装ab压力测试并使用
  19. websocket搭建错误
  20. KEIL C51代码优化详细分析

热门文章

  1. Java多线程编程的常见陷阱
  2. 团队的Kick off
  3. web 分享到facebook
  4. jq复制
  5. 小容量的byteBuffer 读取大文本
  6. Docker volume权限导致的几个问题
  7. 自制操作系统Antz(8)——实现内核 (中) 扩展内核
  8. Spring cloud Greenwich Eureka
  9. uni-app编写小程序
  10. writeup