IDEA同步远程分支信息
在Idea视图中GIT的分支信息在右下角,若是咱们在remote新建了分支,本地默认不显示,能够在上方导航:VCS-Update project 同步远程分支信息。
git
IDEA新建、切换本地分支
在IDEA右下角GTI视图中,咱们能够选择分支进行checkout,即新建/切换分支;
若是咱们须要指定从哪一个分支新建分支,则在GIT视图中选择分支-checkout As进行新建
若是咱们须要查看某个分支是从哪一个分支拉的,咱们可使用命令:git reflog show childBranch 命令查看
vim
GIT命令新建/切换分支
--查看当前分支 git branch --基于某个分支新建分支 git checkout 原分支名 --新建分支并切换 git checkout -b 新分支名称 --而后使用git branch查看,分支已经新建并切换
GIT命令查看/切换上游分支
咱们使用git checkout as分支后,分支默认跟踪的是checkout的分支,咱们可使用命令来查看当前分支跟踪的上游分支测试
--查看当前分支的上游分支 git branch -vv --切换跟踪的上游分支 git branch --set-upstream-to=origin/release_1001
GIT命令删除/恢复分支
删除fetch
--查看分支列表 git branch -a --删除本地分支 git branch -D 分支名称 --删除远程分支 git push origin --delete 分支名称
恢复.net
删除时会显示被删除的hash $ git branch -D dev Deleted branch dev (was 1a103dd). --恢复删除 git branch dev 1a103dd(分支hash便可)
git远程强制覆盖本地
好比说本地删除了一个文件,须要远程覆盖回来3d
git reset --hard origin/所在的分支
IDEA合并分支
例如咱们从test分支新建了dev分支,在dev分支上进行了代码改动后,须要将dev的提交合并到test分支。code
- git视图选择test分支checkout切换到test
- 项目右键:git-repository-pull更新test分支
- 项目右键:git-repository-merge changes,选择dev分支进行合并
GIT撤销merge
假设咱们合并了一个分支,可是不想合并了,想撤销这个合并的动做blog
git merge --abort
GIT选择合并某次提交
master拉出分支dev,且都进行了屡次提交,此时master须要合并dev某一次的提交(多是个紧急bug修复)。排序
--1.切换到master分支 checkout master --2.git页面上查看提交记录(git log -n查看最近n条) git log -5 --3.选择合并某个commit git cherry-pick 0601e177dd
而后就正常pull> push便可rem
GIT rebase
通常状况下咱们若是须要合并代码,会使用git merge,可是还有一个比较强大的功能是rebase;rebase的意思是指将某个分支按照另外一个分支从新设置基准;这样的好处有:
- rebase对比merge节点树会显示的更加清晰
- rebase能够减小没必要要的commit信息
merge和rebase对比
假设咱们有分支master,而后checkout出来一个dev,咱们按照如下操做步骤来测试一下。
1.master 修改并commit 2.dev 修改并commit 3.master 修改并commit 4.dev修改并commit
若是咱们的dev分支须要和master保持最新,避免无效修改,咱们须要将master代码合并到dev中。
//切换到dev分支 git checkout dev //dev分支同步master的提交 git rebase master
下图是咱们对比merge(左)和rebase(右)的节点树显示效果。
由上图能够看出,merge后的节点树会按照提交时间进行排序;而dev重设基准后,dev的提交都是在master后面显示,由此能够保持提交信息的清晰。
rebase合并提交信息
注意,此状况在本地提交状况下使用
假设存在一种这样的状况:我在本地修改了一个bug,commit了5次以后才修好,那么若是我吧这些push到remote,会致使gitlog很乱,其实这五个提交能够合并成一个。在这种状况下,咱们可使用rebase合并本地的commit。
首先咱们在本地进行5次提交,git log以下:
而后咱们使用git rebase -i 提交ID(注意这个id表明,合并这个id以后的全部提交,可是不包含这个id的,若是须要包含的话要往前找一下)
git rebase -i cf8525cd52c4bb87d3f11b4f721e6c1a8a3ac3f4
而后git会进入vim页面,咱们能够按insert进入编辑模式,填写对应的操做;此处有三个参数:
- pick : 表明合并后的提交用这个提交的注释
- s : squash命令的简写,表明合并提交中包含这个提交
- d : 表明合并提交中排除这个提交
咱们按须要更改参数后,esc退出编辑模式,:wq写入并退出,git会进入下一步:填写合并的commit message界面:
一样的咱们进入vim的编辑模式,注释掉不须要的信息,并将5次提交的信息修改成bug fix 2,:wq写入并退出就完成了合并。
最后,咱们分别在git命令和IDEA视图中查看,咱们的5次提交信息以及合并为bug fix 2。
push和remote冲突
本地进行了修改,而后commit了;结果push的时候发现remote已经被修改过,咱们使用pull命令后,会失败,此时会提示: You have not concluded your merge.(MERGE_HEAD exists) 此时咱们应该:
- 备份本地数据
- 放弃本地修改,远程reset本地
git fetch --all
git reset --hard origin/所在的分支 - 而后用备份的数据手动合并本地再提交
fork保持最新
Fork的代码如何保持和原分支最新?
Fork的代码如何提交到原分支?
参见另外一篇:
http://www.javashuo.com/article/p-hxmwqdim-nw.html