git基础3

git 基础3

Collaboration 合作

  • Collaboration workflows
  • Pushing,fetching and pulling
  • Pull requests,issues and milestones
  • Contributing to open-source projects

Workflows

Centralized Workflow

示意图如下:

当John想要给Amy传代码的时候,他首先会将文件push到云上的repository,Amy看见之后,会从云上拉去John的代码到本地进行浏览或者修改。如果John和Amy的代码冲突了,那么Amy经过修改之后再将代码Push到云上。在大多数小团队中,都用这种工作流。

Intergration-Manager

对于一些开源项目,有很多contributors,他们的代码并不是完全安全的,所以它们递交的代码并不能直接放到云里。

当有一个contributor想要commit的时候,会从云上的repository中Fork一个新的Repository,然后再从这个新的Repository 中克隆代码。当修改完成递交后,也是递交到这个新的Repository

然后,Contributor会给Maintainer发一个Pull request.当Maintainer收到请求之后,会从新的Repository中拉取Contributor修改后的代码,检查是合格。如果合格,他们就会将代码Push到原本的云端上去

Adding Collaborators

自我们创建了新的Repository 之后,只有我一个人拥有push的权限。我们可以点击绿色的 Invite a collaborator 来给我们伙伴push的权限。

Fetching

因为我们不能时刻和云上的repository保持同步,那么当云上的repository出现了新的commit的时候,本地暂时还没有,我们可以用 git fetch 命令将本地repository与云上的repository保持同步。

但是当我们同步之后,我们本地的状态是这样的:

也就是说现在有两个Master指针,一个是云上的Master指针。我们可以用 git merge origin/master 来将两个指针合并。

我们 git fetch 之后,发现 本地的master和origin/master指向的commit是不同的。

然后我们用 git merge origin/master 将两个master指针合并

结果如下

Pulling

  • Pull = fetch + merge

git pull 命令,默认会使用 Three-Way Merge, 但是我们可以通过 git pull —rebase 把merge形式换成rebase

如果本地有一个commit B,云上有一个commit C,那么运行git pull 之后,在本地的 A之后又会跟上commit C,这时候出现了分支。然后再进行Three-Way Merge合并到一起。

  • git pull -rebase

git pull -rebase 就是将 本地的MASTER移动到云端 origin/MASTER 之后

我们在github上对readme文件进行一下修改,然后在本地使用rebase操作

直接 git pull 之后,我们得到的 log 信息如下:

git pull --rebase 之后,log 信息如下:

Pushing

一般我们利用 git push 就可以将本地的commit推送到云端去。但是遇到这种情况该怎么办?

这里在确定之前,千万别用 git push -f 因为这个命令会让本地的 C commit 覆盖掉云端上的 D commit,这可能会酿成大祸。

所以遇到本地和云端当前的状态不一样的时候,最好的方法就是先将云端的D commit pull下来,和本地的C commit 合并,然后再用 git push 推送上去,最后的结果如下图:

Sharing Tags

在本地创建一个 tag git tag 1.0

在本地删除一个tag git tag -d v1.0

将tag push到云端去:git push origin v1.0

将tag 从云端中删除: git push origin --delete v1.0

Releases

如果这个版本只是先行版、测试版,可以在下面勾选 This is a pre-release

Release 不是git的特性,而是github特有的,比tag的层级更高

Sharing Branches

如果我们要和其他队友在分支上进行合作,那么就要对分支进行分享。

首先我们新建一个分支:git switch -C feature/change-password

然后我么用 git push -u origin feature/change-password 将这个分支push到云上。

我们可以用 git push -d origin feature/change-password 将分支删除。

使用 git -vv 就能够看到本地分支跟踪的远程分支。

左边的是本地的分支,右边蓝色的的是远程的分支。在没有push上去之前,我们发现 本地有 feature/change-password 分支但远程没有

在git push之后我们发现本地分支追踪到了远程的分支。

使用 git branch -r 能看到远程所有的分支:

在没有push上去之间,云端只有HEAD和main

在push 上去之后,云端有了一个新的 feature/change-password

Collaboration Workflow

Pull Requests

Resolving Conflicts

Issues

Labels

Milestones

Contributing to Open-source Projects

Keeping a Forked Repository Up to Date

Collaboration Using VSCode

Collaboration Using GitKraken

Summary

Exercises

Rewriting History

Introduction

Why Rewrite History

The Golden Rule of Rewriting History

Example of a Bad History

Undoing Commits

Reverting Commits

Recovering Lost Commits

Amending the Last Commit

Amending an Earlier Commit

Dropping Commits

Rewording Commit Messages

Reordering Commits

Squashing Commits

Splitting a Commit

Rewriting History Using GitKraken

Summary

-------------本文结束,感谢您的阅读-------------