Skip to content

怎样使用Git进行开发

Coet edited this page Aug 29, 2018 · 1 revision

具体的开发流程为

  • 在github网页,fork仓库
  • git clone 下载仓库
  • git branch 新建分支
  • git add/commit 提交修改
  • git pull 从远程下载到本地,让本地保持与远程相同的最新状态
  • git merge/rebase 分支远程和本地的相应合并,为git push做准备
  • git push 将本地更改上传到远程仓库
  • 在github网页,创建pull request,等待code review后接收修改

fork 远程仓库

如果要对某个项目进行开发,但又没有对远程仓库的写权限,就必须fork这个仓库,然后使用pull request对项目进行修改。 进入github上的远程仓库主页,如fastnlp,点击fork,将整个项目复制到你的github账户下。

下载repo

fork项目后,使用git clone将项目下载到本地

git clone [url-of-repo] [name]

将仓库下载到本地,并改名为name

查看仓库的状态

clone成功后,可以在项目中查看项目的状态

git status

可以看到当前所在分支,已修改,暂存(staged)文件等信息

git log

可以查看当前分支的历史提交记录

gitk

图形界面的git,便于查看各分支与提交信息

分支切换

每个项目一般会有多个分支,保存项目的多个版本,其中最重要的分支是master,是项目的主分支。而开发时一般不直接修改主分支,而是新建一个分支,修改完成后再合并到主分支。

git branch

查看现有的本地分支,以及当前所在分支

git branch [name]

基于所在的分支,创建一个分支

git branch --remote

查看所有远程仓库的分支

git checkout [branch]

可以切换当前分支到branch

git checkout -b [branch]

创建分支,名为branch,并切换过去

更改和提交

当切换到一个开发的分支后,就可以修改代码,修改完成后,需要提交你的修改

git add .
git commit -m "...."

可以将修改过的文件全部放入暂存区并提交。

git add [file-name]
git add -i
git commit

如果不想将所有修改过的文件都提交,而只提交部分文件。可以在git add时指定文件名,或设置-i参数,交互式的将文件暂存,再commit

git commit --amend

如果想修改最近一次提交,使用--amend将重新执行最近一次提交。(建议不要修改已经push到公开仓库的提交,特别是已经被其他人pull到本地的提交)

远程管理

一般而言,git clone的项目有一个默认的远程仓库origin,地址为clone时指定的url。

git remote -v

可以查看当前本地仓库对应的所有远程仓库和地址

git remote add [name] [url]

增加远程仓库,命名为name, 地址为url

git fetch [remote]

从远程仓库name拉取更新,拉取之后,可以使用git branch --remotegit checkout等命令查看远程仓库的分支和切换分支

git pull [remote] [remote-branch]:[local-branch]

相当于git fetch之后执行git merge命令,从远程拉取更新后自动将远程分支remote-branch合并到本地分支local-branch

git push [remote-repo] [local-branch]:[remote-branch]

将本地分支local-branch推送到远程分支remote-branch,如果分支不存在,自动创建远程分支。

在开发完成后,我们可能在自定义的分支提交了几次,之后准备将代码push上传github,再创建pull request合并到项目主分支。而在运行git push之前,我们需要与远程分支同步一次,因为此时可能主分支有新的提交。

git pull [remote] master:[branch]

可以将远程master分支与本地branch合并,相当于git merge操作。

git pull --rebase [remote] master:[branch]

使用rebase模式将远程master分支与本地branch合并,相当于git rebase操作。

同步完成后,可以使用git push进行提交,这时创建的pull request就绝对没有冲突了。

分支修改合并

git checkout A
git merge B

可以将B分支合并到A分支,如果AB分支是分叉的,会自动commit一个提交,之后B分支消失。

git checkout B
git rebase A

可以将B中提交合并到A分支提交的末尾,不产生新的提交,之后B分支消失。需要注意mergerebase合并方向相反。

创建PR

创建pull request,并设置reviewers,让仓库的管理人看到你的代码,并将你的贡献合并到主分支中。 pull request本质上是并入分支和被并入分支的两个分支进行merge操作,所以如果pull request有冲突,可以使用git merge解决冲突后重新提交。如果后续需要修改已经pull request的代码,可以直接提交的并入分支,修改后的提交会自动出现在pull request当中。

Clone this wiki locally