Git带着问题去实践(四)

本篇主要用来入门Git协作。

首先来熟悉一些团队协作涉及的基本命令。

如何查看当前仓库的远程连接情况?

可以通过remote命令来实现:

1
2
3
$git remote -v
origin https://github.com/cgIIrw/Git_Prac.git (fetch)
origin https://github.com/cgIIrw/Git_Prac.git (push)

也可以只使用git remote显示连接别名,这里是origin。

通过git remote rename <old> <new>可以更改old名为new名。

通过fetch拉取的远程提交存放在什么地方?

执行命令:

1
2
3
$git fetch origin master
From https://github.com/cgIIrw/Git_Prac
* branch master -> FETCH_HEAD

拉取的信息被保存在.git下的FETCH_HEAD文件中,读取该文件:

1
2
$cat .git/FETCH_HEAD
050b5ea26b2594f7d78c6a9271221edf86dfe6e9 branch 'master' of https://github.com/cgIIrw/Git_Prac

可见该文件保存了远程仓库master分支的提交号。

如何合并fetch到的远程提交?

首先要确定合并到本地的哪一个提交,这一步可以使用git checkout <branch>来实现,然后将fetch到的远程提交合并到该上,采用命令:

1
$git merge FETCH_HEAD

要注意的是,git pull通常相当于执行了git fetch再执行git merge,但一般不建议使用git pull而是使用后者。

如何将git pull默认的merge改为rebase?

前面已经提到了,git pull相当于git fetch + git merge,如果希望merge更改为rebase,那么只要显式的调用git pull --rebase origin即可,它表示拉取当前分支对应的公共仓库中的提交,然后并入当前分支。

git push origin serverfix:serverfix命令的意涵是什么?

progit-zh-v2.1.1.pdf里这样写道:“推送本地的serverfix分支,将其作为远程仓库的serverfix分支”,但是如果执行git push origin branch01:master,会提示:

1
2
3
4
5
6
7
To https://github.com/cgIIrw/Git_Prac.git
! [rejected] branch01 -> master (non-fast-forward)
error: failed to push some refs to 'https://github.com/cgIIrw/Git_Prac.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

说明了你要推送的这个版本落后于服务器上的版本,如果非要推送,可以尝试添加-f参数。

如何使用pull request参与一个项目?

首先,pull request是GitHub的一个功能,并非Git的特性,而同一个GitHub账号通过不同分支也能进行pull request,下面就来模拟一下。

新建一个分支名为pullrequestbranch,修改text01.md的内容,添加一行“Add pull request branch.”语句。将该分支推送到公共仓库,进入到该分支:

pullrequest01

点击new pull request选项,然后撰写comment:

pullrequest02

点击Create pull request,解决掉冲突后出现的画面:

pullrequest03

点击Merge pull request后完成合并:

pullrequest04

小结

本篇介绍了几个常用的写作命令,并用实践的方式尝试使用使用pull request参与一个项目。

参考

progit-zh-v2.1.1.pdf