在任务上下文中理解git命令
我需要帮助理解git拉/取合并等。。。 我知道这个网站上有很多文章和答案,所以我会把它放在我遇到的问题的背景下在任务上下文中理解git命令,git,git-pull,git-fetch,Git,Git Pull,Git Fetch,我需要帮助理解git拉/取合并等。。。 我知道这个网站上有很多文章和答案,所以我会把它放在我遇到的问题的背景下 所以,我有这个: Remote branch "myBranch" file A file B Local Branch "myBranch" file A file B 此时,这两个分支是相同的 2.)我继续在远程分支上手动创建一个附加文件。模仿,好像是另一个开发者做的 因此,情况发生了变化 Remote branch "myBranch"
Remote branch "myBranch"
file A
file B
Local Branch "myBranch"
file A
file B
Remote branch "myBranch"
file A
file B
file C *
Local Branch "myBranch"
file A
file B
现在,我知道gitfetch命令将“告诉我”有更改,但不会修改我的本地分支。
当我运行git fetch时,我得到以下输出
$ git fetch
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 4 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (4/4), done.
From https://bvdevgithubvm.broadviewnet.com/internal-dev/bvn-process-history-service
0c075bc..6098e63 prototype -> origin/prototype
但是!!我只知道有区别。
我怎么知道发生了什么变化。在将远程分支带到本地分支(到本地计算机)之前,我可以查看远程分支上的更改吗我想,我正在寻找的是,如果你知道SVN世界,就相当于在做SVN更新之前,能够看到SVN日志,看看谁提交了什么 这是我问题的第一部分。现在进入第二部分,这可能被视为一个独立的问题 3.)因此,我从上面调用git pull并将远程修改带到本地分支 现在的情况是
Remote branch "myBranch"
file A
file B
file C
Local Branch "myBranch"
file A
file B
file C
在这一点上,分支是相同的
因此,我继续从我的本地分支删除文件C。
然后我提交更改,但不推送它们。(然而)
在这一点上,图片是这样的:
Remote branch "myBranch"
file A
file B
file C
Local Branch "myBranch"
file A
file B
现在,这就是我感到困惑的地方。如果我做git fetch或git pull,
输出为
$ git pull
Already up to date.
我本想知道远程分支上有什么东西使它与众不同。但是我不能吗?我如何处理这个问题?
现在,我了解到这种行为可能有一个原因,原因在于git filosophy,而不是SVN(例如)。
但是,我如何处理这种差异呢?我怎么知道遥控器上的情况可能发生了变化 我想你被困在svn世界里了。。。你需要摆脱它,因为你对事物的看法会被打破 首先,不要考虑文件的外观。。。考虑一下这些修订是什么(因为git实际上就是这样做的)。。。这就是为什么如果你环顾四周,你会发现很多问题都与不同分支中设置修订的方式有关,而不是关于其中包含哪些文件的问题(当然,有些问题确实涉及这些内容……但大多数都与修订以及如何处理修订相关) 因此,第一个问题:
git diff --name-status remote/branchx # see what files changed
git diff remote/branchx # see the diff between both branches
git log HEAD remote/branchx # show the revisions that separate both branches
现在,关于你的第二个问题。。。。你当地的分公司搬走了,当然。。。但是远程没有,因此如果您尝试获取,本地repo数据库上的远程引用将不会移动(本地repo的远程指针已经设置在那里,并且您正在跟踪的远程分支的尖端已经是分支历史的一部分)。。。这就是git告诉你的。我想你被困在svn世界里了。。。你需要摆脱它,因为你对事物的看法会被打破 首先,不要考虑文件的外观。。。考虑一下这些修订是什么(因为git实际上就是这样做的)。。。这就是为什么如果你环顾四周,你会发现很多问题都与不同分支中设置修订的方式有关,而不是关于其中包含哪些文件的问题(当然,有些问题确实涉及这些内容……但大多数都与修订以及如何处理修订相关) 因此,第一个问题:
git diff --name-status remote/branchx # see what files changed
git diff remote/branchx # see the diff between both branches
git log HEAD remote/branchx # show the revisions that separate both branches
现在,关于你的第二个问题。。。。你当地的分公司搬走了,当然。。。但是远程没有,因此如果您尝试获取,本地repo数据库上的远程引用将不会移动(本地repo的远程指针已经设置在那里,并且您正在跟踪的远程分支的尖端已经是分支历史的一部分)。。。这就是git告诉你的
我怎么知道发生了什么变化。在将远程分支带到本地分支(本地计算机)之前,我可以查看远程分支上的更改吗
当然。在远程分支和本地分支之间执行git diff
,如中所述
因此,我继续从我的本地分支删除文件C。然后我提交更改,但不推送它们。(然而)!!。。。我本想知道远程分支上有什么东西使它与众不同。但是我不能?我该怎么处理
如果查看远程分支的日志,您将看到提交列表。如果您查看本地分支的日志,您将看到一个类似的提交列表,除了本地分支还有一个提交列表,即删除文件C
的提交列表。这比服务器上的任何更改都要新;git告诉您,您的本地分支与远程分支是最新的,因为本地分支拥有远程分支中的每个提交,然后是一些提交。最新还意味着您可以毫无问题地将更改推送到远程分支;当您这样做时,远程服务器将获得删除文件C
的新提交,并且repo将再次匹配
如果您想查看本地分支与远程分支的区别,可以再次使用上面提到的git diff
考虑一下如果其他人更改了远程分支会发生什么情况。他们所做的更改可能与您所做的任何操作都不冲突——例如,他们只是添加了一个文件D
。在这种情况下,您的更改不会与远程分支冲突,因此您仍然可以毫无问题地推进更改。或者,他们可能会做一些与您的版本冲突的事情;也许他们更改了文件C
。在这种情况下,git无法知道他们对文件C
的更改或您的更改是正确的,因此您需要手动解决该冲突,然后才能将更改推送到远程
我怎么知道发生了什么变化。在将远程分支带到本地分支(本地计算机)之前,我可以查看远程分支上的更改吗
当然。做一个<代码