美文网首页
Git-34-38: 协作时文件的变更

Git-34-38: 协作时文件的变更

作者: WenxuanLi | 来源:发表于2019-04-04 12:14 被阅读0次

李文轩 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,两个人,同分支,不同文件

  1. A push 了,B pull之后在push,不会起冲突
  2. 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 加进要的文件。

相关文章

网友评论

      本文标题:Git-34-38: 协作时文件的变更

      本文链接:https://www.haomeiwen.com/subject/elefiqtx.html