将开发分支与master合并

我在GitHub存储库中有两个分支,即masterdevelopment。我在开发分支中进行所有开发,如图所示。

git branch developmentgit add *git commit -m "My initial commit message"git push -u origin development

现在我想将development分支上的所有更改合并到master中。我目前的方法是:

git checkout mastergit merge developmentgit push -u origin master

请让我知道我遵循的程序是否正确。

970318 次浏览

我通常喜欢先将master合并到development中,这样如果有任何冲突,我可以在development分支中解决,我的master保持干净。

(on branch development)$ git merge master(resolve any merge conflicts if there are any)git checkout mastergit merge development (there won't be any conflicts now)

这两种方法没有太大的区别,但我注意到有时我不想将分支合并到master中,在合并它们之后,或者在合并之前还有更多的工作要做,所以我倾向于保持master不变,直到最终的东西。

编辑:来自评论

如果你想跟踪谁在何时进行了合并,你可以在合并时使用--no-ff标志来做到这一点。这通常仅在将development合并到master(最后一步)时有用,因为你可能需要在工作流中多次将master合并到development(第一步),并且为这些创建一个提交节点可能不是很有用。

git merge --no-ff development

是的,这是正确的,但它看起来像一个非常基本的工作流程,您只是在更改准备好集成之前缓冲它们。您应该查看git支持的更高级的工作流程。您可能喜欢主题分支方法,它允许您并行处理多个功能,或者毕业办法方法,它稍微扩展了您当前的工作流程。

就个人而言,我的方法与您的方法类似,在返回master时增加了一些分支和一些提交。

我的一个同事不喜欢如此频繁地切换分支,并留在开发分支上,使用类似于以下内容的东西,所有这些都是从开发分支执行的。

git fetch origin mastergit merge mastergit push origin development:master

第一行确保他有自上次更新他的本地存储库以来为master所做的任何上游提交。

第二个将这些更改(如果有的话)从master拉入开发

第三个将开发分支(现在与master完全合并)推送到原始/master。

我可能有他的基本工作流程有点错误,但这是它的主要要点。

如果您可以使用git flow工作流就太好了。它可以轻松地将开发分支合并为master。

你要做的就是遵循这里提到的git-flow指令:

步骤:

  • 设置git-flow项目
  • 创建分支并将所有内容合并到开发
  • 运行命令git flow release start <version_number>
  • 然后为发布提供意义的信息
  • 运行命令git flow release finish <version_number>
  • 它将所有内容合并到大师并将分支更改为大师
  • 运行命令git push将更改发布到远程大师

有关更多信息,请访问页面-http://danielkummer.github.io/git-flow-cheatsheet/

对于那些在没有任何分支知识的情况下来到这里的人的底部解释。

基本的main/master分支开发逻辑是:您只在另一个分支上工作,因此您只使用main/master分支与另一个准备合并的分支合并。

您开始以这种方式创建一个新分支:

  1. 在您的本地目录中克隆存储库(或创建一个新的存储库):
$ cd /var/www$ git clone git@bitbucket.org:user_name/repository_name.git
  1. 创建一个新分支。它将包含主分支存储库的最新文件
$ git branch new_branch
  1. 将当前git分支更改为new_branch
$ git checkout new_branch
  1. 编码,提交,像往常一样…
$ git add .$ git commit -m “Initial commit”$ git push # pushes commits only to “new_branch”
  1. 当此分支上的作业完成时,与“master”分支合并:
$ git merge master$ git checkout master # goes to master branch$ git merge development # merges files in localhost. Master shouldn’t have any  commits ahead, otherwise there will be a need for pull and merging code by hands!$ git push # pushes all “new_branch” commits to both branches - “master” and “new_branch”

我还建议使用Sourcetree应用程序查看更改和分支的可视化树。

1)在分支开发中,使用以下命令检查git状态:

git status

应该没有未提交的代码。如果是,请将您的代码推送到开发分支:

git add *
git commit -m "My initial commit message"
git push origin Development

2)在开发分支上,运行以下两个命令:

git branch -f master HEAD
git push -f origin master

它会将您的开发分支代码推送到主分支。

1. //pull the latest changes of current development branch if anygit pull (current development branch)
2. //switch to master branchgit checkout master
3. //pull all the changes if anygit pull
4. //Now merge development into mastergit merge development
5. //push the master branchgit push origin master

步骤1

创建并切换到一个新的“dev”分支,您的本地git文件与远程同步,但“dev”分支尚不存在。

git branch dev # creategit checkout dev # switch# No need to git add or git commit, the current# branch's files will be cloned to the new branch by-default.git push --set-upstream origin dev # push the "dev" branch to the remote.

步骤2

对“dev”分支进行更改(如果您遵循步骤1,则为当前更改),提交并将它们推送到远程“dev”分支。

git add .git commit -S -m "my first commit to the dev branch" # remove the -S if you're not "secure", secure = when you already setup crypto private and public keys (i.e "verified" green sign in github)git push -u origin dev # push the changes to the remote, -u origin dev is optional but good to use.

步骤3

将您的“dev”分支合并到“master”中。

git checkout dev # switch to "dev" branch if you're not already.git merge master # optionally, this command is being used to resolve any conflicts if you pushed any changes to your "master" but "dev" doesn't have that commit.git checkout master # switch to "master", which is the branch you want to be merged.git merge --no-ff dev # merge the "dev" branch into the "master" one.

如果您使用的是Mac或Ubuntu,请转到分支的工作文件夹。在终端中

假设harisdev是分行名。

git checkout master

如果有未跟踪或未提交的文件,您将收到错误,您必须提交或删除所有未跟踪或未提交的文件。

git merge harisdev
git push origin master

删除分支的最后一个命令。

$ git branch -d harisdev

基于@Sailesh和@DavidCulp:

(on branch development)$ git fetch origin master$ git merge FETCH_HEAD(resolve any merge conflicts if there are any)$ git checkout master$ git merge --no-ff development (there won't be any conflicts now)

第一个命令将确保您已将所有上游提交到远程master,并且不会发生Sailesh响应。

第二个将执行合并并创建冲突,然后您可以解决这些冲突。

这样做之后,您终于可以结帐主切换到主。

然后将开发分支合并到本地master上。no-ff标志将在master中创建一个提交节点,以便整个合并可以跟踪。

之后,您可以提交并推送合并。

此过程将确保人们可以看到从开发到master的合并提交,然后如果他们去查看开发分支,他们可以看到您在开发期间对该分支所做的单独提交。

或者,如果您想添加在开发分支中完成的工作的摘要,您可以在推送之前修改合并提交。

编辑:我最初的答案建议git merge master没有做任何事情,最好在获取源/主后做git merge FETCH_HEAD

这是我通常的做法。首先,确保您已准备好将更改合并到master中。

  1. 使用git fetch检查开发是否与来自远程服务器的最新更改保持同步
  2. 一旦读取完成git checkout master
  3. 通过执行git pull确保主分支具有最新的更新
  4. 准备工作完成后,您可以开始与git merge development合并
  5. 使用git push -u origin master推送更改,您就完成了。

你可以在文章中找到更多关于git合并的信息。

一旦您“结账”开发分支,您…

 git add .git commit -m "first commit"git push origin devgit merge master
git checkout mastergit merge devgit push origin master

我想最简单的解决办法是

git checkout mastergit remote updategit merge origin/Develop -X theirsgit commit -m commit -m "New release"git push --recurse-submodules=check --progress "origin" refs/heads/Master

这也保留了所有正在使用的分支的历史

如果您使用gerrit,以下命令可以完美工作。

git checkout mastergit merge --no-ff development

您可以使用默认提交消息保存。确保已生成更改ID。您可以使用以下命令来确保。

git commit --amend

然后使用以下命令推送。

git push origin HEAD:refs/for/refs/heads/master

您可能会遇到如下错误消息。

! [remote rejected] HEAD -> refs/for/refs/heads/master (you are not allowed to upload merges)

为了解决这个问题,gerrit项目管理员必须在gerrit中创建另一个名为'refs/for/refs/head/master'或'refs/for/refs/head/*'的引用(这将涵盖所有然后向该引用授予“推送合并提交”权限,并在需要时授予“提交”权限以提交GCR。

现在,再次尝试上述推送命令,它应该可以工作。

学分:

https://github.com/ReviewAssistant/reviewassistant/wiki/Merging-branches-in-Gerrit

https://stackoverflow.com/a/21199818/3877642

1. //push the latest changes of current development branch if anygit push (current development branch)
2. //switch to master branchgit checkout master
3. //pull all the changes if any from (current development branch)git pull origin (current development branch)
4. //Now merge development into mastergit merge development
5. //push the master branchgit push origin master
ErrorTo https://github.com/rajputankit22/todos-posts.git! [rejected]        master -> master (fetch first)error: failed to push some refs to 'https://github.com/rajputankit22/todos-posts.git'hint: Updates were rejected because the remote contains work that you dohint: not have locally. This is usually caused by another repository pushinghint: to the same ref. You may want to first integrate the remote changeshint: (e.g., 'git pull ...') before pushing again.hint: See the 'Note about fast-forwards' in 'git push --help' for details.
Then Use5. //push the master branch forcefullygit push -f origin master