Git安装
1、安装brew https://brew.sh/ 后在安装
2、brew install git
3、git --version 查看git版本
4、which git 显示当前git所在的目录
版本控制
版本控制分为 集成式版本控制 和 分布式开发
1、集成式开发(svn):需要一台中央服务器,客户端需要连接到中央服务器进行更新、提交代码文件等
2、分布式开发(Git):每台机器都有自己版本库不需要中央服务器
分布式的好处:
1、不需要连接中央服务器来提交和更新文件
2、通过不同的版本来做不同阶段开发,不同的版本文件可以随时切换回之前的版本
3、分支管理上要比svn方便很多
[master +0 ~0 -0 !1]: + 增加 ~修改 -删除 !有冲突
Git的配置文件:vi ~/.gitconfig
常用命令
1、将远端的库克隆到本地: git clone 远程代码库
2、切换到一个分支: git checkout 分支名
3、如果分支存在只切换分支,如果不存在则创建并切换到分支: git checkout -b 新建本地分支名 origin/远端分支名
4、查看当前所在的分支: git branch
创建新分支: git branch 新分支名
5、将文件添加到暂存区: git add 文件名 git add . 添加所有工作区文件到暂存区
6、提交文件: git commit -m '提交版本内容说明'
7、将本地代码提交到远端库: git push origin/develop_web 本地分支名
8、查看当前文件状态: git status
9、从远端拉取拉取代码: git pull 远端分支名
10、临时保存: git stash git stash pop
11、从主分支上merge代码: git merge origin/dev_crm2.6_base
12、将本地分支提交到主分支: pull resquest
13、删除本地分支: git branch -d dev_crm2.8_base
14、删除远端分支: git push origin :PublicAdmin_V1.0.0_liusiguang 或 git branch -r -d origin/PublicAdmin_V1.0.0_liusiguang
15、从远端单独拉取一个文件: git checkout origin/master -- path/to/file
16、撤消最后一次commit提交:git reset --hard HEAD^
17、chenkout一个分支后,pull的时候想在app_master下切换,使用下面命令进行转换
git branch --set-upstream 当前分支名 远端分支名
18、git branch --track branch 名称 远端branch 建立一个 tracking 远端 branch 的 branch,这样以后 push/pull都会直接对应到该远端的branch。
git branch --set-upstream branch 远端branch 将一个已存在的 branch 设定成 tracking 远端的branch。
19、git branch -m oldName newName 修改分支名
版本库介绍
工作区(文件) 暂存区(过度) 版本库 | 远端(服务器版本)
1、工作区: 开发的区域
2、暂存区: 将工作区的文件执行 git add '文件名' 命令会使文件添加到暂存区,工作区的文件如果删除了就没有了
git add '文件名'
3、版本库: 通过commit来提交到版本库, 暂存区需要先提交到版本库才能最后提交远端
git commit -m '提交说明内容'
add 和 commit 连着的写法
git commit -a -m '提交注释' // 这样可以省略add的步骤
4、提交到远端: 通过push来提交到远端
git push origin develop_web_2.5.1_siguang // 提交到远端
初始化配置
1、设置贡献者
设置用户名: git config --global user.name “username”
设置Email-id: git config --global user.email “email”
2、设置避免PULLING提交合并: git config --global branch.autosetuprebase always
3、颜色高亮
git config --global color.ui true
git config --global color.status auto
git config --global color.branch auto
4、设置默认编辑器: git config --global core.editor vim Git的使用系统默认取自VISUAL或EDITOR环境变量的编辑器
5、设置默认的合并工具: git config --global merge.tool vimdiff
6、查看设置命令: git config --list
创建版本库
1、git init 库名: 创建一个git仓库
2、git remote add origin git@xbc.me:wordpress.git: 添加远程版本库origin
3、git remote: 显示所有远端主机
git remote -v: 查看远程仓库地址
git remote show <主机名>: 查看远端主机的详细信息
git remote add <主机名> <网址>: 添加远程主机
git remote rm <主机名>: 删除远端主机
git remote rename <原主机名> <新主机名>: 对无端主机进行改名
在clone完成之后,Git 会自动为你将此远程仓库命名为origin,origin只相当于一个别名,运行git remote –v可以看到下载的版本路径。
克隆项目地址: git clone 远程版本库地址
文件操作(查看、添加、提交、删除、恢复,撤消)
查看:
1、git help: 显示help的命令功能
2、git show 提交ID: 显示某次提交的内容,先通过git log来查看提交的ID
commit 1bf1682120ac9fa622b04a77781f5999e0aabd9e // 提交的ID
3、git log: 显示所有的版本记录
添加: 添加到缓存区
1、git add 文件名: 将工作文件修改提交到本地暂存区 add只是刷新了git的跟踪信息,并未发到版本库中
2、git add --all: 将所有修改过的文件提交到暂存区
提交: 提交到版本库
1、git commit -m '注释提交理由': 代码提交
git commit --amend: 使用最后一次提交的注释在提交
2、git push origin master: 将刚commit的版本推送到远程服务器
删除:
1、git rm 'main.js': 删除暂存区的main.js文件
2、git rm -f 'main.js': 删除工作区和暂存区的main.js文件
3、git rm --cached 'main.js': 如果工作区和暂存区都有main.js,只删除暂存区文件
恢复:
如果把工作区的文件删除了,想从版本库中恢复回来的方法:
1、恢复文件
先 git log 来查看commit 提交的历史版本,获取到commitId
commit d5d9357319a4ef536b30f2d906bb71700beaa899
Author: liusiugang <liusiguang@renrendai.com>
Date: Thu Nov 3 15:19:00 2016 +0800
修改邻趣配送时间接口加merchantId参数+
git checkout [commitId] [要恢复的文件名]
// 这样就将版本库中的common.coffee.js恢复到了工作区
git checkout d5d9357319a4ef536b30f2d906bb71700beaa899 common.coffee.js
2、恢复版本
1)git reset --hard [commitId] 恢复到指定提交的版本的内容,通过commitId来指定版本
2)git reset --hard HEAD^ 恢复向后一个版本
3)git reflog 显示所有的操作记录
撤消:
1、git reset <file>: 从暂存区恢复到工作文件
2、git reset --: 从暂存区恢复到工作文件
3、git reset --hard: 恢复最近一次提交过的状态,即放弃上次提交后的所有本次修改
4、git reset HEAD b: 现在你只想提交a文件,不想提交b文件,应该这样
5、git revert <$id>: 恢复某次提交的状态,恢复动作本身也创建了一次提交对象
6、git revert HEAD: 恢复最后一次提交的状态
git checkout -- filname 撤回远端版本或指定文件
git commit --amend 重新合并一个提交方案
文件重命名:
1、git mv reademe.txt 新文件名
查看当前库状态: git status
显示
On branch master // master分支
Your branch is up-to-date with 'origin/master'. // 你的分支是最新的 master
nothing to commit, working directory clean // 无提交,工作目录干净
分支
1、查看分支
查看本地分支: git branch
查看远端分支: git branch -r
查看本地和远端分支: git branch -a
查看各分支最后提交的信息: git branch -v
2、创建分支
git branch 分支名称
3、把分支提交到远端分支
# 如果在本地创建一个分支,与团队其它人一起开发,需要将这个分支push到远端仓库,不然这个分支只是存在你本地,其它人看不到,每次commit完代码就需要提交到远端
git push origin 本地分支名
Example:
appledeMacBook-Pro:what apple$ git push origin dev_1.1_lulu // 将dev_1.1_lulu分支提交到远端
Username for 'https://github.com': siguang1983 // 输入远程的用户名
Password for 'https://siguang1983@github.com': // 输入远端的密码
Counting objects: 4, done. // 成功
4、删除分支:
git branch -d <branch> 删除某个分支
git branch -D <branch> 强制删除某个分支 (未被合并的分支被删除的时候需要强制)
5、切换分支:
git checkout [要切换的分支] 本地切换分支
git checkout -b [新创建分支名] [远端地址分支] 创建并且直接切换到这个新分支
6、合并分支: git morge 分支名
git merge master develop # 将develop分支合并到master上
7、分支的更新与合并
# 将本地仓库更新到最新版本,直接更新自动合并冲突,如果执行fetch提示哪些冲突需要手动更新
git pull origin 分支名
# 执行一下合并,并且手动去去解决冲突
git merge [branch]
# 将这个冲突文件重新提交
git add <filename>
# 查看一下冲突的文件
git diff 确定分支 目标分支
# 冲突处理完后就可以commit
git commit -m 'fix conflict'
8、删除远程版本: git push origin :br-1.0.0
9、查看分支提交的记录: git whatchanged
commit 1bf1682120ac9fa622b04a77781f5999e0aabd9e // 提交的状态码
Author: apple <apple@appledeMacBook-Pro.local> // 提交人
Date: Mon May 2 17:24:16 2016 +0800 // 日期
siguang add index.js // 提交文件
:100644 100644 e69de29... 50b777e... M js/index.js
拉取远端代码 和 提交远端代码
1、pull、fetch 两种都是拉取代码功能,有一些小的差别
git pull : 拉取远端代码,直接合并 // Already up-to-date. 已更新
git fetch: 拉取远端代码,并不合并,查看哪些冲突,来进行手动merge合并
2、版本库提交到远端
git push origin/dev_crm2.9_base
3、pull request:将代码提交到远端版本中的一个请求,在merge就可以直接合到远端仓库中
解决冲突
拉取完代码git pull 或 git fetch 拉取远程某个分支的代码,再与本地的指定分支合并(包括fetch和merge)
git pull origin/dev_crm2.5_base
git merge origin/dev_crm2.5_base
有时候pull的时候会提示:git branch --set-upstream master origin/next
Git会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)
如果有冲突 常见提示:
Auto-merging addCacke.html // 自动合并了这个文件
CONFLICT (content): Merge conflict in addCacke.html // 有冲突在 addCacke.html文件中合并冲突
Automatic merge failed; fix conflicts and then commit the result. // 自动合并失败解决冲突
查看文件之间区别 diff
1、git diff <file>: 是工作区与暂存区的
2、git diff <$id1> <$id2>: 比较两次提交之间的差异
3、git diff <branch1>..<branch2>: 在两个分支之间比较
4、git diff --staged: 比较暂存区和版本库差异
5、git diff --cached: 暂存区和版本区差异
6、git diff --stat: 仅仅比较统计信息
查看提交记录
1、git log: 显示提交的所有记录
commit 1bf1682120ac9fa622b04a77781f5999e0aabd9e // 提交的ID
Author: apple <apple@appledeMacBook-Pro.local> // 提交用户
Date: Mon May 2 17:24:16 2016 +0800 // 提交日期
siguang add index.js // 提交文件
2、git log <file>: 查看该文件每次提交记录
3、git log -p <file> : 查看每次详细修改内容的diff
4、git log -p -2: 查看最近两次详细修改内容的diff
5、git log --status: 查看提交统计信息
sourceTree 使用
一、设置拉取、推送默认密码
仓库 -> 远程仓库 -> 将路径配置成 http://用户名:密码@172.16.x.xx:7990/scm/ibg/ibg.git
gitLab生成公钥私钥
$ ls -l .ssh // 查看.ssh目录下有哪些配置文件
$ cd .ssh // 进入到.ssh目录
$ ssh-keygen -t rsa -C "liusiguang@youxin.com" // 创建公钥和私钥
创建时会提示输入的密码直接回车为空就行
会创建这两个文件: id_rsa.youxin、id_rsa.youxin.pub
$ vi config // 创建一个config文件,将下面内容加入进去,config文件就是配置git起哪个公钥
Host *.youxin.com
IdentityFile ~/.ssh/id_rsa.youxin
User git
$ vim id_rsa.youxin.pub // 将.pub文件内的内容copy出来
$ 进入gitlab -> setting -> 点左侧栏的ssh keys
key的就把刚才id_rsa.youxin.pub的内容粘进去
title: 随便起名
$ SourceTree配置
1、偏好设置 电子邮件填写 "liusiguang@youxin.com"
2、仓库/仓库设置 -> 高级 -> 电子邮件填写 "liusiguang@youxin.com"
3、仓库/仓库设置 -> 远程仓库 -> 编辑配置文件(路径中修改为gitlab中拉代码的SSH地址,而不是HTTP的)
遇到问题
一、工作test分支冲突
1、测试不试不合test
2、如果test, A、B两个分支冲突解决方法
1、如果一起上,将A、B合并处理冲突
2、将A上线,合并到master,在将B拉master解决冲突,在合test
3、如果同一文件不改同一行不会冲突
| 参考资料:
|
| 可视化工具:SourceTree
| 远端:stash
|
| http://iissnan.com/progit/
| http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/
| http://www.yiibai.com/git/git_update_operation.html