Git学习笔记 002 Git分支 part2

分支的管理

查询分支的信息,注意结果中带星号的是当前分支,也就是说HEAD指向的分支

$ git branch

* master

testing

查看每个分支的最后一次提交

$ git branch -v

* master 4416a2c [ahead 6] fix conflict

testing 7957b99 changed by testing branch

查看已经合并的分支

$ git branch --merged

* master

testing

查看未合并的分支,因为所有分支都合并过了, 所以这个查询结果是空的

$ git branch --no-merged

如果想删除没有合并的分支, 使用branch -d会出现错误。强制删除可以使用branch -D命令

远程分支

在克隆了一个远程仓库或者从远程仓库拉取最新版本后,git会在本地为用户建立一个和远程一样的分支,并且也会在本地保存远程分支的状态。这样,如果再本地分支修改后,想要回到刚刚克隆下来时的版本,git可以参照本地保存的远程分支的状态返回那时的版本。

远程分支被他人改动后,如果想把最新的版本取到本地,可以使用fetch命令。

$ git fetch origin

之前介绍过,fetch命令是不会自动把远程的文件合并到本地文件的。也就是说同名的本地文件和远程文件内容不一致,它是不会把远程文件合并到本地文件的。

推送

把本地更改好并且提交的文件推送到远程仓库中,可以使用push命令。push命令的一般形式是git push (remote) (branch),这里的(remote)其实是在克隆远程仓库时,git默认为这个远端仓库取名为origin。如下面的示例。

$ git push origin master

Enumerating objects: 13, done.

Counting objects: 100% (13/13), done.

Delta compression using up to 4 threads

Compressing objects: 100% (8/8), done.

Writing objects: 100% (12/12), 1.05 KiB | 53.00 KiB/s, done.

Total 12 (delta 3), reused 0 (delta 0)

remote: Resolving deltas: 100% (3/3), done.

To https://github.com/Kutilion/GitTestProject.git

6e2fa09..4416a2c master -> master

如果示例的命令变为git push origin master:testing,则表明将本地master分支推送到远程分支testing上。区别只是远程和本地的分支名字不一样。

跟踪分支

上边提到,拉去远程分支后,会在本地保存远程分支的状态,其实是在本地创建了一个跟踪分支,用于跟踪远程分支。本地的分支通过跟踪分支来与远程分支进行交互。使用如下命令可以让本地分支跟踪远程分支

$ git checkout --track origin/serverfix

Branch serverfix set up to track remote branch serverfix from origin.

Switched to a new branch 'serverfix'

希望本地分支的名字和远程分支不一样,但是还希望本地分支跟踪远程分支可以用

$ git checkout -b sf origin/serverfix

Branch sf set up to track remote branch serverfix from origin.

Switched to a new branch 'sf'

可以看到,本地分支sf,跟踪了远程服务器origin上的serverfix分支。

查看所有分支的跟踪信息可以用branch -vv

$ git branch -vv

* master 4416a2c [origin/master] fix conflict

testing 7957b99 changed by testing branch

可以看到,master跟踪了origin/master分支。这里有可能出现[origin/master: ahead 3, behind 1]这样的结果, 说明本地分支有三个提交没有推送到远程分支, 远端有一个提交没有反应到本地。

拉取

当 git fetch 命令从服务器上抓取本地没有的数据时,它并不会修改工作目录中的内容。 它只会获取数据然后让你自己合并。

然而, git pull 命令在大多数情况下它的含义是一个 git fetch 紧接着一个git merge 命令。 git pull 都会查找当前分支所跟踪的服务器与分支,从服务器上抓取数据然后尝试合并入那个远程分支。

pull有时候回产生一些让人困惑的结果, 所以最好还是使用fetch和merge来明确指定拉去和合并。

删除远程分支

如下的命令会删除远程分支,但是个人更推荐直接到远程分支服务器上去可视化删除,更加安全可控。

git push origin --delete master


分享到:


相關文章: