李文轩 2019-02-27
Fetch 远端的一个分支(当远端分支出现在分支表里):
$ git checkout -b <local-branch> <remote-branch>
# local-branch 和 remote-branch 建议用同一个名字
# remote-branch的名称 应该是 'git branch -av' 里,某一个分支的'remotes/'后面的所有
Fetch 远端的一个分支(当远端分支没有出现在分支表里):
$ git fetch <remote-repo>
# 可以拉下没有之前没有出现的远端的分支
34. 同一个Repo,两个人,同分支,不同文件
- A push 了,B pull之后在push,不会起冲突
- A push 了,B 在push之前没有pull
- B 被远端拒绝,分支已经不是fast forward了
- fetch + branch-av 后,出现比远端[ahead 1, behind 1]commit。
$ git fetch <remote-repo>
# 把新的内容拉下来
$ git branch -av
# 查看push 被拒绝的原因(在所编辑的分支上)
$ git merge <remote-repo/branch-name>
# 本地更改与远端库里的特定分支做 merge
# 在不同人修改不同文件下,此操作不会有什么其他的意外
$ git push
# 在 merge 之后,本地就有了远端最新的更改和自己最新的更改
# push之后,其他人就能看到你的更改
35. 同一个Repo,两个人,同分支,同文件,不同区域
- 和上一个部分其实一样,git 自动处理了
36. 同一个Repo,两个人,同分支,同文件,同区域
- 后一个提交的人会被远端仓库拒绝
- Git merge <remote-repo/branch-name>是没有用的,会提示 "Already up to date."
被拒绝的一方(后push的)
$ git pull
# 把远端的变化拉到本地
# 这种情况,系统会提示 CONFLICT: Automatic merge failed
# 这里要手动到受冲突到文件里修改冲突
# HEAD部分的内容是本地的更改,下半部则是远端的。
# 这里要讨论保留什么内容
$ git status
# 这时候会提示 unmerged paths
# 这时需要再提交一个 commit,说明merge的情况
# 如果提交完后再查看状态,可以看到本地比远端快2个commit
# push就解决了这个问题
37. 同时便跟了文件名和文件内容
- 一个人改变了文件名,另一个改变了文件内容
- solution和之前的做法一样,先pull,然后git会自动生成一个 merge 的 commit
38. 把同一文件改成不同的文件名
- 不同人更改文件名并都push,后push都会被拒绝
- 后者 pull之后,远端会传来前者更改后都文件。
- 同时拥有远端的文件(名1),和本地文件(名2)
- Status:both deleted: 原名, added by us: 名2,added by them: 名1
- 协商后,用 git rm 在暂存区删除原名文件和不要的文件,用 git add 加进要的文件。