2014.05.28 GitHub

Github有本地仓库以及远程仓库之分。


在本地计算机上执行的git add, commit这些操作都是针对本地的仓库进行处理


通过git remote add origin https://github.com/username/Hello-World.git将本地的仓库与远程仓库建立起连接

或者直接git clone URL一个git项目


使用git push origin master将本地的更改以patch形式上传到远程仓库。


抓取更新数据并合并到本地文件

git fetch upstream
# Fetches any new changes from the original repository
git merge upstream/master
# Merges any changes fetched into your working files


git pull upstream master
# Pulls commits from 'upstream' and stores them in the local repository


通过git branch(新建分支) & git checkout(切换HEAD当前分支) & git merge来进行分支管理


自动补全
如果你用的是 Bash shell,可以试试看 Git 提供的自动补全脚本。下载 Git 的源代码,进入 contrib/completion 目录,会看到一个 git-completion.bash 文件。将此文件复制到你自己的用户主目录中(译注:按照下面的示例,还应改名加上点:cp git-completion.bash ~/.git-completion.bash),并把下面一行内容添加到你的 .bashrc 文件中:


source ~/.git-completion.bash
也可以为系统上所有用户都设置默认使用此脚本。Mac 上将此脚本复制到 /opt/local/etc/bash_completion.d 目录中,Linux 上则复制到 /etc/bash_completion.d/ 目录中。这两处目录中的脚本,都会在 Bash 启动时自动加载。


将 HEAD 想象为当前分支的别名


因为每次提交时都记录了祖先信息(译注:即 parent 对象),将来要合并分支时,寻找恰当的合并基础(译注:即共同祖先)的工作其实已经自然而然地摆在那里了,所以实现起来非常容易。Git 鼓励开发者频繁使用分支,正是因为有着这些特性作保障。


git checkout -b [branchname]=
git branch [branchname]
git checkout [branchname]


如果顺着一个分支走下去可以到达另一个分支的话,那么 Git 在合并两者时,只会简单地把指针右移,因为这种单线的历史分支不存在任何需要解决的分歧,所以这种合并过程可以称为快进(Fast forward)。


git merge [branchname] 将branchname合并到当前分支


git status,合并时出现冲突的文件,将以unmerged状态列出
标准的冲突解决标记
<<<<<<<<<<


========


>>>>>>>>>>
git mergetoll
git branch -merged
git branch --no-merged


一般的分支都是在本地进行

original/master指针与master指针的区别

git fetch origin 来同步远程服务器上的数据到本地,从服务器上抓取更新之后,会在本地产生一个[服务器]/[分支名]的远程分支,必须通过git merge [远程分支]之后才能在本地进行操作,或者执行git checkout -b [分支名] [远程名]/[分支名],一次性创建分支。



创建一个teamone/master的远程分支

git remote add teamone git://git.team1.ourcompany.com

git fetch teamone


推送分支

git push [远程仓库名] [原分支名]:[新分支名]

远程分支无法在本地移动,推送之后才会动作


删除分支

git push [远程名] :[分支名]


衍合

rebase,将当前分支的改变应用于其他分支,使得其他分支变为当前分支的直接下游

原理是回到两个分支最近的共同祖先,根据当前分支(也就是要进行衍合的分支 experiment)后续的历次提交对象(这里只有一个 C3),生成一系列文件补丁,然后以基底分支(也就是主干分支 master)最后一个提交对象(C4)为新的出发点,逐个应用之前准备好的补丁文件,最后会生成一个新的合并提交对象(C3'),从而改写 experiment 的提交历史,使它成为 master 分支的直接下游。

最后整合得到的结果没有任何区别,但衍合能产生一个更为整洁的提交历史。衍合是按照每行的修改次序重演一遍修改,而合并是把最终结果合在一起。

实际上是把解决分支补丁同最新主干代码之间冲突的责任,化转为由提交补丁的人来解决。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值