1.拉取远程分支并创建本地分支:
git clone -b staging http://1*ce.git local_dir // -b: 指定远程分支staging
方法一:git checkout -b 本地分支x origin/远程分支名x // 本地新建并自动切换分支x。本地分支会和远程分支建立映射关系。
方式二:git fetch origin 远程分支名x:本地分支名x //本地新建分支x但不自动切换,需手动checkout。本地分支不会和远程分支建立映射关系。
2. 关联: 目的是在执行git pull/push时就用指定对应的远程分支
git branch --set-upstream-to=origin/remote local
git remote add origin gy(为空时默认master) git@.....git
3. 常用命令
git branch –a本地和远程 git branch –r 远程 git branch 本地 git branch –D local删除 git commit --amend 修改msg |
git checkout –b dev origin/remote 新建分支并切换 git branch dev 新建分支不切换 git checkout dev分支切换 git stash (pop) |
git push origin local:remote 删除远程仓库:$ git push origin --delete remoteDev
git pull origin dev(远程分支名) [git pull --rebase] |
-------------合并代码beyond compare----------------- -- git reset --hard commit_id 撤销到某次提交 ;后git push –f //远程分支退到指定commit 注:回退风险,防止回退别人的代码 -- git revert –n cmid 撤销某次提交; 解决冲突后add/commit/push |
||
git rebase -i 【IdBeg】【IdEnd】 // 前开后闭,将本地多次提交合并为一个以简化提交历史。 git rebase -i head~3 // 合并前三个 git rebase -abort 撤销rebase操作 |
||
git log --oneline -n10 --author="**" |
4.分支合并问题:
4.1.把master分支合并到其它分支用rebase,把其它分支合并到master用merge。rebase不会产生多余的commit,并且保持直线。【但会污染本地自开发分支,不建议】
-
- 首先切换到master分支: git pull拉取最新分支状态;
- 然后切回local分支:
git rebase -i 【IdBeg】【IdEnd】 // 前开后闭,将本地多次提交合并为一个以简化提交历史。否则git rebase master时会多次解决冲突(最坏情况下,每个提交都会相应解决一个冲突)。
git rebase master // 将master同步到本地,可能要手动解决冲突。【解决冲突后试运行,用git-add后无需commit,只要执行: git rebase --continue】
-
- 切换到master分支: git merge local后,git push将master分支的提交上传。
4.2 cherry-pick命令
- git rebase -i head~3 合并前三个,dev分支上合并提交,然后切换到master
- git cherry-pick bc09e8d8 将dev上某次提交内容 合入到master分支上 。 【解决冲突后add/git cherry-pick --continue】
4.3 推荐merge request
- git checkout -t origin/preview // git checkout –b dev-guo origin/remote
- git pull origin preview
- git merge dev-guyan //git merge origin/dev-guoyan
- git push origin preview
4.4 撤销git reset
--mixed 不删除工作空间改动代码,撤销commit,且撤销git add . 操作. 默认参数.
--soft 不删除工作空间改动代码,撤销commit,不撤销git add .
--hard 删除工作空间改动代码,撤销commit,撤销git add . 注意完成这个操作后,就恢复到了上一次的commit状态。
1.本地分支落后: Fast-forward合并,可以理解为HEAD指针指向的快速移动。
2.本地分支超前:解决冲突后git-
add
,然后不用-m
参数直接git commit
(
:wq
保存退出)。
4.5 插入commit:
- git rebase -i b0aa963 # edit commit_d后保存退出
- [提交本次commit_t] 后 git rebase --continue # t会在d之后
- git push -f # 有风险 !!
=================================================================================================================
git fetch只会将本地库所关联的远程库的commit id更新至最新. 本地库并没有变化,HEAD没有变化.
git pull会将本地库更新至远程库的最新状态,HEAD也相应指向最新的commit id
-- git pull发生冲突时, 先用git stash命令把当前修改过的工作存储到栈里面, 再git pull拉取代码. 再git stash pop把栈里面的代码还原,这时如果再冲突,需要手动解决.