我在开发中有一个名为“dmgr2”的分支,并且我想从主分支(现场)拉取并将所有更改合并到我的开发分支中。有没有更好的方法来做这件事?
以下是我计划在提交更改后要做的事情:
git checkout dmgr2
git pull origin master
这会将实时更改拉入我的开发分支,或者我理解有误吗?
你列出的步骤是可行的,但还有一种更长的方式可以给你更多的选项:
git checkout dmgr2 # gets you "on branch dmgr2"
git fetch origin # gets you up to date with origin
git merge origin/master
fetch
命令可以在 merge
之前的任何时候执行,也就是说,你可以交换 fetch 和 checkout 的顺序,因为 fetch
只是到指定的远程仓库(origin
)并对其说:“给我所有我没有的东西”,即所有分支上的提交。它们会被复制到你的仓库中,但对于远程仓库上名为 branch
的任何分支,都会以 origin/branch
的名称命名。
此时,你可以使用任何查看器(如 git log
、gitk
等)来查看“他们有什么”你没有的,反之亦然。有时这只是为了获得温暖的感觉(“啊,是的,那确实是我想要的”),有时则有助于完全改变策略(“哇,我还不想要那些东西”)。
最后,merge
命令会获取给定的提交,你可以将其命名为 origin/master
,并采取任何必要的措施将该提交及其祖先合并到运行 merge
命令时所在的任何分支中。如果需要,你可以插入 --no-ff
或 --ff-only
来防止快进或仅在结果是快进时才合并。
当你使用以下序列时:
git checkout dmgr2
git pull origin master
pull
命令指示 git 运行 git fetch
,然后运行相当于 git merge origin/master
的命令。因此,这几乎与手动完成这两个步骤是相同的,但可能有一些微妙的差异,这可能对您不太重要。 (特别是由 pull 运行的 fetch 步骤仅传输 origin/master
,并且它不会更新存储库中的引用:1 任何新提交都只能由特殊的 FETCH_HEAD
引用来引用。)
如果您使用更明确的 git fetch origin
(然后可选地查看周围内容),然后是 git merge origin/master
序列,则还可以通过跨网络运行一次 fetch
将自己的本地 master
更新为远程。
git fetch origin
git checkout master
git merge --ff-only origin/master
git checkout dmgr2
git merge --no-ff origin/master
1这个第二部分已经在git 1.8.4中进行了更改,现在会机会主义地更新“远程分支”引用。(正如发布说明所说,跳过更新是一个有意的设计决策,但事实证明更多的人喜欢git进行更新。如果您想要旧的远程分支SHA-1,默认情况下保存在reflog中,因此可以从中恢复。这也启用了一个新的git 1.9/2.0功能,用于查找上游rebase。)
git checkout
命令是不会破坏数据的,因此通常不需要撤销 git fetch
。所以,你可能想知道如何撤销合并提交,对吗?答案与其他提交撤销方法相同:要么使用 git reset
,要么使用 git revert
。对于未发布的更改,git reset
通常是最好的方法;对于已经有其他人使用的更改,则可能更适合使用 git revert
,但请参考 Linus Torvald 关于撤销合并提交的建议:https://www.kernel.org/pub/software/scm/git/docs/howto/revert-a-faulty-merge.txt。 - torekgitk
、git log --graph
带或不带--oneline
等),您可以使用git show
或git show -m
来查看合并提交,或者使用git diff
。在所有这些情况下,您都需要在命令行中输入指定的程序。 - torek在我的本地分支工作时,我喜欢关注名为 dev
的开发分支的更新。
通常,我更喜欢使用:
git fetch
git rebase origin/dev
rebase
,会发生什么? - vitaliis我成功地使用以下方法将最新的代码从主分支合并到我的分支:
git rebase origin/master
git fetch origin
。 - lenoohfeature-1
分支上,想要获取最新的已合并更新或减少合并冲突的可能性,那么可以执行以下操作拉取master
分支:git pull origin master
git pull
git merge origin/master
将 master 分支合并到你的分支中 - 不会影响 master 分支!
这样做会将自从你们两个分支分叉后进入 master 分支中的所有更改合并到你的分支中。
如果你的分支已经被公开,那么这样做是可以的,因为它不会重写历史记录。
我已经进行了主分支的更新和我的分支的更新,我希望我的分支通过变基(rebase)来跟踪主分支,以正确地跟踪所有历史记录。让我们将我的分支称为Mybranch:
git checkout master
git pull --rebase
git checkout Mybranch
git rebase master
git push -f origin Mybranch
根据情况和git提示,我需要使用 git mergetool
, git rebase --continue
, git rebase --skip
和 git add -u
来解决所有冲突,直到一切都解决为止。
注意:在Tzachi Cohen的帮助下,对上一个阶段进行更正,使用 "-f
" 强制git在服务器上"更新历史记录" 。
现在,分支应与主分支对齐并完成变基,并且远程也已更新,因此在 git log
中不会出现"behind"或"ahead",我只需删除所有本地冲突的*.orig文件以保持文件夹"干净"。
如果dev干净并且只想用main或master的更改更新
git checkout dev
git pull origin <main or master>
git push origin dev
如果您的历史记录不匹配并且仍然想要合并,请使用此选项:
git pull origin master --allow-unrelated-histories
git checkout mybranch
git rebase master mybranch
git add .
git rebase --continue
git commit -a -m "test"
git pull
git push
使用git add .
将您的文件暂存。
这里有另一种解决方案,可以将主分支的更改合并到您的分支中:
git checkout mybranch
git fetch origin
git merge origin/master
当你使用 rebase
时,你的git历史记录会更加清晰,但是使用merge origin/master
更加容易。
First, fetch the code using:
git fetch
Then use:
git rebase origin/dev
首先进入主/原始分支
git checkout master/origin
First run " git branch temp"
then "git checkout temp"
& then "git merge development"
if any conflicts come, please resolve & commit
and then
1. git checkout development
2. git merge temp
完成以上操作后,请运行检查。
git branch
如果结果是开发
否则运行
git checkout development
现在您正处于开发分支上
您可以运行
git merge temp
git checkout dev
命令切换到dev
分支,然后运行git pull --rebase origin master
命令。如果幸运的话,就不会出现冲突,dev
分支将会拥有来自master
分支的最新更改。 - jww