文章目录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
git remote add [shortname] [url]  要添加一个新的远程仓库,可以指定一个简单的名字,以便将来引用
git fetch [shortname] #[new branch] master -> pb/master
git checkout --track origin/br-2.1.2.1 :
git fetch,可以将远程分支信息获取到本地,再运行 git checkout -b local-branchname origin/remote_branchname 就可以将远程分支映射到本地命名为local-branchname 的一分支。
git branch -a
git branch -d br-2.1.2.1 删掉刚才track的分支
git checkout -b br-2.1.1.1 origin/br-2.1.2.1


git pull == git fetch + git merge
git merge branch1 将branch1合并到master
下面使用meld手工解决冲突:
git mergetool -t meld
Merging the files: xxx

Normal merge conflict for 'main.c':
{local}: modified
{remote}: modified
Hit return to start merge resolution tool (meld):
这时会弹出meld的三向比较窗口,解决了冲突后提交,git会自动添加上备注,描述分支合并情况。

git remote rename pb paul ,对远程仓库的重命名,也会使对应的分支名称发生变化,原来的 pb/master 分支现在成了paul/master。
git remote rm xx 移除对应的远端仓库

git remote show origin

从远程分支 checkout 出来的本地分支,称为跟踪分支(tracking branch)。跟踪分支是一种和远程分支有直接联系的本地分支。在跟踪分支里输入git push,Git 会自行推断应该向哪个服务器的哪个分支推送数据。反过来,在这些分支里运行git pull 会获取所有远程索引,并把它们的数据都合并到本地分支中来。
http://www.open-open.com/lib/view/open1328069889514.html
http://blog.csdn.net/arkblue/article/details/9790129

在克隆仓库时,Git 通常会自动创建一个名为 master 的分支来跟踪 origin/master。这正是git push 和 git pull 一开始就能正常工作的原因。

从远程仓库抓取数据
正如之前所看到的,可以用下面的命令从远程仓库抓取数据到本地:

$ git fetch [remote-name]
此命令会到远程仓库中拉取所有你本地仓库中还没有的数据。运行完成后,你就可以在本地访问该远程仓库中的所有分支,将其中某个分支合并到本地,或者只是取出某个分支,一探究竟。(我们会在第三章详细讨论关于分支的概念和操作。)

如果是克隆了一个仓库,此命令会自动将远程仓库归于 origin 名下。所以,git fetch origin 会抓取从你上次克隆以来别人上传到此远程仓库中的所有更新(或是上次 fetch 以来别人提交的更新)。有一点很重要,需要记住,fetch 命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支,只有当你确实准备好了,才能手工合并。(说明:事先需要创建好远程的仓库,然后执行:git remote add [仓库名] [仓库url],git fetch [远程仓库名],即可抓取到远程仓库数据到本地,再用git merge remotes/[仓库名]/master就可以将远程仓库merge到本地当前branch。这种分支方式比较适合独立-整合开发,即各自开发测试好后再整合在一起。比如,Android的Framework和AP开发。

可以使用–bare 选项运行git init 来设定一个空仓库,这会初始化一个不包含工作目录的仓库。

$ cd /opt/git

$ mkdir project.git

$ cd project.git

$ git –bare init

这时,Join,Josie 或者Jessica 就可以把它加为远程仓库,推送一个分支,从而把第一个版本的工程上传到仓库里了。)

如果设置了某个分支用于跟踪某个远端仓库的分支(参见下节及第三章的内容),可以使用 git pull 命令自动抓取数据下来,然后将远端分支自动合并到本地仓库中当前分支。在日常工作中我们经常这么用,既快且好。实际上,默认情况下 git clone 命令本质上就是自动创建了本地的 master 分支用于跟踪远程仓库中的 master 分支(假设远程仓库确实有 master 分支)。所以一般我们运行 git pull,目的都是要从原始克隆的远端仓库中抓取数据后,合并到工作目录中当前分支。

推送数据到远程仓库
项目进行到一个阶段,要同别人分享目前的成果,可以将本地仓库中的数据推送到远程仓库。实现这个任务的命令很简单: git push [remote-name] [branch-name]。如果要把本地的 master 分支推送到 origin 服务器上(再次说明下,克隆操作会自动使用默认的 master 和 origin 名字),可以运行下面的命令:

$ git push origin master
只有在所克隆的服务器上有写权限,或者同一时刻没有其他人在推数据,这条命令才会如期完成任务。如果在你推数据前,已经有其他人推送了若干更新,那你的推送操作就会被驳回。你必须先把他们的更新抓取到本地,并到自己的项目中,然后才可以再次推送。有关推送数据到远程仓库的详细内容见第三章。

查看远程仓库信息
我们可以通过命令 git remote show [remote-name] 查看某个远程仓库的详细信息,比如要看所克隆的origin 仓库,可以运行:

$ git remote show origin

  • remote origin
    URL: git://github.com/schacon/ticgit.git
    Remote branch merged with ‘git pull’ while on branch master
    master
    Tracked remote branches
    master
    ticgit
    除了对应的克隆地址外,它还给出了许多额外的信息。它友善地告诉你如果是在 master 分支,就可以用git pull 命令抓取数据合并到本地。另外还列出了所有处于跟踪状态中的远端分支。

实际使用过程中,git remote show 给出的信息可能会像这样:

$

  • remote origin
    URL: git@github.com:defunkt/github.git
    Remote branch merged with ‘git pull’ while on branch issues
    issues
    Remote branch merged with ‘git pull’ while on branch master
    master
    New remote branches (next fetch will store in remotes/origin)
    caching
    Stale tracking branches (use ‘git remote prune’)
    libwalker
    walker2
    Tracked remote branches
    acl
    apiv2
    dashboard2
    issues
    master
    postgres
    Local branch pushed with ‘git push’
    master:master
    它告诉我们,运行 git push 时缺省推送的分支是什么(译注:最后两行)。它还显示了有哪些远端分支还没有同步到本地(译注:第六行的 caching 分支),哪些已同步到本地的远端分支在远端服务器上已被删除(译注:Stale tracking branches 下面的两个分支),以及运行 git pull 时将自动合并哪些分支(译注:前四行中列出的 issues 和 master 分支)。(此命令也可以查看到本地分支和远程仓库分支的对应关系。)

列出所有分支
tiger@tiger-laptop ~/t/gittest> git branch
branch1

  • master

切换分支
tiger@tiger-laptop ~/t/gittest> git checkout branch1
Switched to branch “branch1”
tiger@tiger-laptop ~/t/gittest> git branch

  • branch1
    master

合并分支

现假设我们在master分支中,需要将branch1合并到master
tiger@tiger-laptop ~/t/gittest>
Auto-merged main.c
CONFLICT (content): Merge conflict in main.c
Automatic merge failed; fix conflicts and then commit the result.
这时main.c中会显示冲突。

文章目录