Jor*_*ein 117 git git-merge git-remote branching-and-merging
我是组织中唯一一个使用以下消息进行提交的人:
将远程跟踪分支'origin/develop'合并到develop中
不知道我在做什么导致他们,但我想停下来.
我发出什么命令来创建这个提交,我应该用什么命令来生成它?
Ric*_*sen 190
git pull可能正在创建提交.如果您进行本地提交然后git pull在其他人将提交推送到存储库之后运行,则Git会下载其他开发人员的提交,然后将其合并到您的本地分支中.
您可以使用git pull --rebase以防止将来发生这种情况,但是变基有其危险,我建议pull完全避免.
相反,我鼓励您遵循以下使用模式:
# download the latest commits
git remote update -p
# update the local branch
git merge --ff-only @{u}
# if the above fails with a complaint that the local branch has
# diverged:
git rebase -p @{u}
Run Code Online (Sandbox Code Playgroud)
git remote update -p下载远程存储库中的所有提交并更新远程跟踪分支(例如,origin/master).它不会触及您的工作目录,索引或本地分支.
所述-p参数梅干删除上游分支.因此,如果foo在origin存储库中删除分支,git remote update -p将自动删除您的origin/fooref.
git merge --ff-only @{u}告诉Git将上游分支(@{u}参数)合并到您的本地分支中,但前提是您的本地分支可以"快速转发"到上游分支(换句话说,如果它没有分歧).
git rebase -p @{u}有效地移动你已经提交但尚未推送到上游分支的提交,这消除了创建你试图避免的愚蠢的合并提交的需要.这改善了开发历史的线性,使其更容易查看.
该-p选项告诉Git保留合并.这可以防止Git线性化被重新提交的提交.例如,如果将要素分支合并到中,则这很重要master.如果没有-p,则功能分支上的每个提交都将master作为线性化的一部分进行复制git rebase.这将使开发历史更难以审查,而不是更容易.
注意: git rebase可能不会按照您的预期执行操作,因此请在推送之前查看结果.例如:
git log --graph --oneline --decorate --date-order --color --boundary @{u}..
Run Code Online (Sandbox Code Playgroud)我更喜欢这种方法,git pull --rebase原因如下:
-p(--preserve-merges)选项git rebase,以防您需要重新定义有意合并(例如,将已推送的功能分支合并到其中master).git up代替git pull为了方便上述操作,我建议创建一个名为的别名up:
git config --global alias.up '!git remote update -p; git merge --ff-only @{u}'
Run Code Online (Sandbox Code Playgroud)
现在,您需要做的就是让您的分支更新是运行:
git up
Run Code Online (Sandbox Code Playgroud)
而不是git pull.如果由于本地分支与上游分支不同而出现错误,那就是您对rebase的提示.
git pull --rebase呢?运行git pull --rebase等同于运行git fetch后跟git rebase.这会尝试快进到新的上游提交,但如果这不可能,那么它会将您的本地提交重新绑定到新的上游提交.这通常没问题,但要小心:
git pull --rebase在合并之前,您没有机会检查提交.根据什么改变上游,它很可能是重订是错误的操作,一rebase --onto,merge,reset,或者push -f可能比普通的更合适rebase.--preserve-merges给rebase操作,因此任何有意合并的功能分支都将被线性化,重放(并因此复制)所有功能分支提交.git pull如果尚未推送创建的合并提交git pull,则可以重新定义合并提交.假设您没有进行任何有意合并(例如,将已推送的功能分支合并到当前分支中),则应执行以下操作:
git rebase @{u}
Run Code Online (Sandbox Code Playgroud)
上面的命令告诉Git选择从HEAD(当前提交)可到达的所有非合并提交,减去所有可到达的提交@{u}(这是"上游分支"的简写,即origin/masterif HEAD是master),重放(cherry-pick) )它们位于上游分支的顶部,然后移动当前分支引用以指向重放提交的结果.这有效地将非合并提交移动到最近的上游提交,这消除了由其创建的合并git pull.
如果你有一个有意的合并提交,你不想运行,git rebase @{u}因为它将重放其他分支中的所有内容.处理这种情况要复杂得多,这就是为什么使用git up和git pull完全避免它的好处.您可能必须使用reset撤消由之创建的合并pull然后执行git rebase -p @{u}.这个-p参数git rebase对我来说没有可靠的工作,所以你最终可能不得不用来reset撤消故意合并,更新你的本地分支@{u},然后重做故意合并(如果有很多毛茸茸的合并,那就太痛苦了冲突).
Ada*_*ruk 17
git fetch
git rebase origin/master
Run Code Online (Sandbox Code Playgroud)
应该这样做.或者如果你想继续使用拉
git pull --rebase
Run Code Online (Sandbox Code Playgroud)
您还可以在配置中将该分支设置为自动重新绑定,或者为您创建的任何其他未来跟踪分支自动设置.然后你可以回去使用
git pull
Run Code Online (Sandbox Code Playgroud)
有关此内容的更多信息,请参阅本页的"使用rebase而不是merge"部分:
http://mislav.uniqpath.com/2010/07/git-tips/
| 归档时间: |
|
| 查看次数: |
63677 次 |
| 最近记录: |