------------------------------------------------------------
1.查看分支
git branch
git branch -a 查看所有分支
git branch <new-branch> 基于当前分支创建新的分支
git branch -r 查看远程分支
git checkout <branch> 切换分支
git branch --track <new-branch> <remote-branch>
git branch <branch> -d 删除本地分支
git branch <branch> -D 强制删除本地分支(如果没有merge进去)
2.本地提交
git add . 当前所有修改添加到下次提交中
git add --all 添加所有,包括新增的
git commit -m "" -a
git commit -m "" readme.txt
git commit -am "" 不需要add,但是不包含添加的部分
git commit -am --amend "" 修改上次提交,并且提交当前修改
git rebase -i 删除commit对象
3.远程提交
git push origin head:refs/for/master%r=song.w,r=song.w
git push origin master
git push origin <local-new-branch> 本地新建分支推送到远程(须有权限)
4.远程同步
git fetch 获取所有最新的分支到工作区(默认是所有)
git fetch <branch> 获取指定的分支
git pull 保证分支是最新的(fetch + merge,容易产生一个空的commit)
git pull --rebase 比起pull安全一点,并且分支不会像merge那样杂乱。
git pull <source-branch> <source-sub-b> 回远程分支并合并到当前分支
git pull <source-branch> <source-sub-b>:<local-branch> 取回远程分支并合并到本地分支
git fetch origin <new-branch> 获取新的分支到仓库
git checkout <branch> 迁出分支,开始同步(也叫切换分支)
git rebase <source-branch> 把源分支合并到当前分支
4.撤销
git reset --hard head 放弃当前工作内容。
git reset --hard head~1 回到上一个历史版本
git reset --hard refLog-change-id 回到未来的一个版本,或者回到历史的某个版本
git checkout filename revert 文件 撤销
4.1文本
git diff
rm -f .git/index.lock
5.合并
git merge <source-branch> 合并到当亲分支(容易产生commit,并且push的时候会出现missing change-id,需要通过
commit -amend 来添加change-id 来解决)
git rebase <source-branch> 合并代码(定义分支的状态)
rebase不会产生新的commit,会自动来重复之前的commit
git rebase -abort 放弃rebase
git squash commits 合并commit
6.备份
7.git 线路图
gitk
10.
------------------------------------------------------------
主题
1.冲突
git rebase <source-branch> 合并代码
git add . 放到缓冲区
git rebase --continue 继续重新定义分支的状态
git push for 重新提交代码
2.合并版本(当前分支的多个版本)
git fetch
git rebase <target-branch> <source-branch>
------------------------------------------------------------
问题
1.git要不要每次push的时候pull一下?
2.origin/head 为啥指向origin/master?
------------------------------------------------------------
todo
1.dev merge 到master,master 再merge到release。
2.
3.
------------------------------------------------------------
注意点:
1.push前需要获取最新
2.别人push之后,如果我本地有commits,则需要uncommitted,然后拉取最新的。
3.切换分支之前要关闭vs,重新打开
4.Your branch is ahead of ‘origin/dev‘ by 1 commit.
这个commit
------------------------------------------------------------
你rebase或者pull下
http://stackoverflow.com/questions/2452226/master-branch-and-origin-master-have-diverged-how-to-undiverge-branches
merge 和rebase区别(关于冗余日志)
http://blog.csdn.net/wh_19910525/article/details/7554489
git教程
http://gitbook.liuhui998.com/
http://blog.csdn.net/wangjia55/article/details/8791180 git rebase 抽屉比喻
------------------------------------------------------------
宋玮 http://blog.csdn.net/w_jewelry/article/details/8123639 解决冲突
git入门 flash http://conf.ctripcorp.com/pages/viewpage.action?pageId=54461673
gerrit 项目申请 http://conf.ctripcorp.com/pages/viewpage.action?pageId=55378426
git问题 http://conf.ctripcorp.com/display/SysDev/10.FAQ
git 所有命令 http://conf.ctripcorp.com/pages/viewpage.action?pageId=13609130
git 基础的命令行 http://conf.ctripcorp.com/pages/viewpage.action?pageId=57509485
git pdf http://git-guide.dev.sh.ctripcorp.com/files/ProGit_zh_CN.pdf
git 常用操作(rebase) http://conf.ctripcorp.com/pages/viewpage.action?pageId=53627858#id-4.常用操作-_Toc394777088详解gitrebase
------------------------------------------------------------
1. merge
>git checkout master
>git merge origin
将远程的分支merge到当前分支,ok之后就提交,当前分支改了,然后远程也改了。
2. rebase
>git checkout master
>git rebase origin
将origin重整,直接就是修改origin分支,好像把当前分支直接嫁接到origin。
所以如果,在不产生冲突下,使用origin不会产出merge commit,因为是一种嫁接。
3. push 的时候no new change
一般是其他分支合并东西过来的,需要修改下当前分支,产生新的commit。
4.push no tracking
修改下没有change-id的commit,git commit --amend -am ""
这样就会有change-id
5.missing Change-Id in commit messa
ge footer 这可能是有一些commit没有change-id
6.怎么保证merge过来的commit不被打散,只要一次review就通过
要都有change-id;如果已经分叉,需要reset,然后pull --rebase,然后再merge。
7.普通的新的commit没有change-id 有可能是没有hooks。
8. merge 的注意点,相关的两个分支都需要获取到最新的状态,否则容易分叉,增加解决的难度,rebase后会重演掉已经存在的commit。
9. git unpack failed: error Missing tree 可以用这个命令 git push --no-thin
------------------------------------------------------------
远程分支的合并必须用merge,本地分支的合并用rebase,理由如下:
1.merge会保留远程提交的commit。
进行衍合的时候,实际上抛弃了一些现存的提交对象而创造了一些类似但不同的新的提交对象。如果你把原来分支中的提交对象发布出去,并且其他人更新下载后在其基础上开展工作,而稍后你又用 git rebase 抛弃这些提交对象,把新的重演后的提交对象发布出去的话,你的合作者就不得不重新合并他们的工作,这样当你再次从他们那里获取内容时,提交历史就会变得一团糟。
2.本地的commit没有发布出去,而且需要一条线的commit,用rebase比较好。
------------------------------------------------------------
1.实验一:分支分叉后,release分支和master分支分叉,release提前修改,master之后,看看commit的先后关系。
2.实验二:rebase的方向问题。