-
在github中创建仓库 仓库url=git://github.com/mn/xx.git
-
即仓库名/远程主机名/ 别名 一般为origin
-
master和dev 既可以只本地分支名, 也可以指远程分支名
pull中: master:master 第一个master为远程分支名
push中: master:master 第二个master为远程分支名
origin/master origin/dev 分别为远程master分支和远程dev分支 -
push前,先pull. pull可能会有代码冲突(解决冲突代码,再commit一次即可)
-
获取工程文件到本地
2.1 配置个人账号
git config --global user.name “xxx”
git config --global user.email “xxx@163.com”
2.2 获取项目到本地(fetch / clone) (仓库关联(remote add)+分支追踪(-u))
git clone git://github.com/mn/xx.git" //并实现了分支的自动追踪
关联远程仓库和分支追踪
//查看关联的远程仓库
git remote -v
//将本地项目与远程仓库关联,
git remote add origin https://git://github.com/mn/xx.git//手动将本地分支与远程分支建立追踪关系, 本地分支可能追踪多个远程分支(不常用) //该远程分支名使用完整的分支名orgin/master, pull和push可以使用简写的远程分支名master. git branch --set-upstream <本地分支名> <远程分支名> git branch --set-upstream master origin/master 本地远程分支名相同, 可以省略最后面的origin/master git branch --set-upstream master origin/next //本地master分支追踪远程next分支 //自动建立追踪关系, 比如git clone, 本地和同名远程分支默认建立追踪关系 //一旦建立追踪关系后, 推送时, 可以简写成git pull origin,如果只追踪一个远程分支, 还可以省略origin(主机名)
git pull
==拉取远程项目 pull == git pull <远程主机名> <远程分支名>:<本地分支名> //(pull的:前后分支名与push的:前后不一致) git push <远程主机名> <本地分支名>:<远程分支名> ------------------------------------------------- git pull origin master:master //最后一个master为当前本地分支 git pull origin master //如果当前本地分支不是master分支, 会将远程master分支合并到当前分支 git pull origin //本地的当前分支自动与对应的origin主机”追踪分支”(remote-tracking branch)进行合并, 适合所有的分支 git pull //以上四个等价 ------------------------------------------------- git pull origin next //1.取回origin/next分支, 再与当前分支合并(当前分支名不一定为next) 相当于 git fetch origin git merge origin/next (git pull = git fetch + git merge) ------------------------------------------------- git pull origin next 等价于下面两个指令(获取+合并),但是不会将origin/next和当前分支建立追踪关系(放心) git fetch origin git merge origin/next ------------------------------------------------- (git pull --rebase = git fetch + git rebase)
git merge
git merge b //将b分支合并到当前分支
git push
//推送项目 git push <远程主机名> <本地分支名>:<远程分支名> git push origin dev:dev //第一个dev为本地分支名 git push origin dev git push origin git push //仓库别名为origin,远程分支名和本地分支名一致, 可以简写, 以上四个命令等价 第一次push需要建立追踪关系 git push -u origin "master" //字符串master为本地分支名 //其实这条指令有两个功能 //第一: 将本地的master分支推送到远程仓库origin //第二: 在推送前,将本地master分支与远程分支origin/master建立追踪关系 -u 等价于 --set-upstream
其他命令
git status 状态 git log 日志 git branch dev //创建dev分支 git checkout -b dev //创建dev分支,并切换到dev分支 reset 退回到某个版本 (自己本地提交的n个commit,还没push, 随便退回, "某个版本之后的所有commit都清除") hard就是坚决删除, mixed在index区还保留(是否确定更改) 如果退回到某个远程仓库的版本 (只是head退回了, remote的版本还存在, 后续还是要pull) revert 退回到某个版本(主要准对部分文件,进行回退, 使用较少) 所有commit都保留,只是新增一个commit 什么场景使用: 想要使用某个(退回)版本的文件修改,其他commit修改的文件一律不变 注意: 只比较当前版本和(退回版本内包含这几个文件)的差异, 进行退回 其他修改文件不变 rollback 回滚
如果报错 fatal: remote origin already exists
执行下面命令
git remote rm origin
然后执行
git remote add origin https://git://github.com/mn/xx.git
日常操作
远程仓库建好后, 创建本地仓库并进行关联方式1: 按照网站提示的代码 一步步执行指令即可(不常用)
mkdir xx-xx git init touch README.md git add . git commmit -m "first commit" git remote add origin http://git:/xx-xx.git git push -u origin "master" //公司中不允许直接推送master分支到远程, 本地测试用
方式2: idea中直接拷贝(推荐)
close idea
get from version control方式3: 直接在文件夹中克隆代码
git clone //自动关联项目,并建立分支追踪关系方式4: 不使用clone,也不推送master
git init git remote add origin http://git:/xx-xx.git git branch --set-upstream origin master origin/master //维护好一个分支追踪,其他分支追踪自动维护
公司常规操作
1.给电脑配置SSH, 生成一个key
2.在网站上创建分支(正常都是origin/master拷贝下来)
3.idea中clone项目 get from version control
4.右下角切换分支
5.git pull
6.git commit n次
7.git push
7.如果要到预发布环境测试, 可以将最新master分支合并到工作分支, 也可以不合并, 等到快要上beta环境前的最后一次预发布环境测试进行合并
8.beta环境上的工作分支要求: 1.已经合并过最新的master 2.合并后且在预发布环境进行发布后
git merge(树状)和 git rebase(线性)比较
git rebase A //当前分支为B, 就是将B分支上的修改都变基(移到)A分支上
merge前
merge后
变基前
变基后
代码:
//通过rebase(变基)将yang分支的所有修改都转移至master分支, 注意:使用rebase,yang分支也获取master分支的所有修改, 具体代码如下
git checkout yang
git rebase master //将yang分支的所有修改变基到master(可能有冲突),查看有哪些冲突文件
//解决冲突
//1.所有的冲突文件都在工作空间中都会有标记冲突的位置, 打开这些文件, 进行修改
//2.git add . 提交所有冲突文件
//3.git commit -m "解决冲突" 提交
//4.git rebase --continue //此时完成了变基, master分支还是之前的提交记录
//yang分支已经有了master提交的commit,
//因为有了冲突,提交了一次commit
//所以两个冲突在时间上最后一次的commit会被冲突的commit覆盖}(没有冲突则
//不覆盖?)
git checkout master
git merge yang //将yang分支合并到当前分支