寻找一个好的git分支/推/拉请求/合并食谱

时间:2018-01-17 22:13:56

标签: git

好吧,我多年来一直在使用git,并且已经阅读过书籍,并且已经阅读了数百篇(如果不是数千篇)帖子,但我仍然不知道"正确的"创建分支并将其推回的方法,并且在出错时花了好几个小时尝试修复git。

让我们说github是一个主分支。我想创建一个master分支的功能分支,然后将我的功能分支推回到github,然后执行拉取请求,让某人合并它。这应该很容易,但每天我们都很挣扎,并且没有任何傻瓜证明的步骤(食谱)

第一步是克隆回购。我总是用乌龟git(windows)做这个。我发现,如果我使用https,我永远不会推回(获得403),我必须使用git @ ...作为repo URL。不知道为什么,但我有一个有效的解决方案。

然后,我可以用3种方式之一创建一个分支。

  1. 在visual studio代码中创建分支(只需输入名称)
  2. 使用乌龟创建分支(有很多选项,我将它们全部保留为默认值)
  3. 在git bash中创建分支:" git checkout -b mybranch"
  4. " git branch my_branch<远程名称> / mybranch" (假设遥控器总是"原点")
  5. 但是,我也看到了以下推荐的方法来创建分支(之后有相应的结账)

    1. git branch --set-upstream my_branch origin / my_branch
    2. git branch --set-upstream-to origin my-branch
    3. 所有这些都完全相同吗?它们都是安全的吗?

      接下来是问题所在的地方,如何将分支推送到github。

      我已阅读过帖子,说这些都是正确的方法:

      1. git push origin
      2. git push -u origin
      3. git push -u origin master
      4. git push -u origin / mybranch
      5. git push -u origin mybranch
      6. 哪个是正确的(即最不可能因为新克隆而重新开始)?

        如果我使用visual studio代码或乌龟进行推送,以上是哪一个呢?

        我明白-u = --set-upstream,但这究竟意味着什么?如果我总是需要它,为什么它默认不这样做?有很多帖子询问这意味着什么,但我还没有找到答案。上游是否意味着起源?

        我承认问题是我的大脑 - 我一直在使用和管理SVN,SCCS,CVS,Clear Case,VSS 30年而且从未遇到过问题,但是git是另一个野兽。

        下一步是如何创建拉取请求?这些教程似乎只是通过github UI来实现这一点。这是否意味着这不是git的功能?即我们不能在命令行上这样做,它必须通过网络完成?

        如果我们通过github web界面创建拉取请求,谁会收到通知,以及如何?

        假设我们被告知我们自己将功能分支合并到主服务器中(没有执行拉取请求),这样做最安全的方法是什么?搜索网络,这是一个答案:

        git checkout mybranch
        git pull 
        git checkout master
        git pull
        git merge --no-ff --no-commit mybranch
        git status
        git commit -m 'merge test branch'
        git push
        

        这是我们可以遵循的最简单(最安全)食谱吗?

2 个答案:

答案 0 :(得分:1)

要完成此old answer about --upstream,您还可以阅读我的#34; Why do I need to explicitly push a new branch?"

只有当你打算进行git push(没有参数)时才设置一个上游分支,并希望Git知道 where 要推送(哪个repo)和到哪里 (哪个远程分支)

这将设置配置branch.<name>.remote and branch.<name>.merge,因此如果您想检查某个分支是否有上游分支,您可以这样做:

git config -l
# or
git branch -vv

最后一个命令将显示与其上游分支相关的本地分支。

  

接下来的问题是我只是&#34; git push origin&#34;。现在我知道这是错的,我应该做的:git push -u origin mybranch&#34;。我怎样才能解决这个问题?

随时you can add an upstream branch to your current branch

git branch -u upstream/abranch

答案 1 :(得分:0)

您可以坚持git checkout -b mybranch(或您正在使用的GUI辅助替代方案)。

至于上游的事情,您可以选择:

  • 推送分支时始终提供上游(即每次执行git push origin mybranch
  • 使用第一个git push设置上游(使用git push -u origin mybranch),然后仅git push设置您想要推送的下一个更改
  • 使用您提供的解决方案之一设置上游,并使用git push
  • 进行推送

您可以在此答案中找到有关上游的信息:Why do I need to do `--set-upstream` all the time?

至于拉取请求,它们不是git功能,而是github功能。它只是询问维护者是否可以合并你的分支(并提供一个UI来实现)。 所有维护人员(以及观察存储库的人员)都会收到通知,任何进入存储库页面的人都可以看到您的请求。

对于合并,有一些替代方案,具体取决于您是否需要合并提交,以及其他一些首选项。如果我找到一个可以链接到的好资源,我会更新我的答案。