【问题标题】:git plush ('git pull && git push') merging files already committedgit plush ('git pull && git push') 合并已经提交的文件
【发布时间】:2013-11-08 17:24:23
【问题描述】:

我对 git 不是很熟悉,所以请耐心等待。我已经看到多次提到 'git plush' 作为推送已提交更改的“正确”方法,并且我已经使用了很长一段时间。然而现在,在我最近才开始工作的回购中,毛绒玩具的工作方式与我以前看到的不同。现在它使我的树保持最新,然后将所有更新的文件合并到我的提交中,并重新提交所有通过拉取更新的文件。

# git commit
[master aaf2cc1] commit comment
1 files changed, 233 insertions(+), 0 deletions(-)
create mode 100755 my-file.rb
(19:23:11)-(rkasten@tash)-(jobs:0)-(! 633)-(~/project)
# git pull && git push
remote: Counting objects: 16, done.
remote: Compressing objects: 100% (10/10), done.
remote: Total 10 (delta 6), reused 0 (delta 0)
Unpacking objects: 100% (10/10), done.
From ssh://server.company.com/repo/git/project
   6a5aa62..228d9b1  master     -> origin/master
Merge made by recursive.
DEMO_files/joshtest.rb                             |  119 ++++++++++++++++++++
.../portal/prod-portal-config.json                 |    4 +-
portal-maintenance.rb                              |    5 +-
3 files changed, 124 insertions(+), 4 deletions(-)
create mode 100755 DEMO_files/joshtest.rb
Counting objects: 7, done.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 3.00 KiB, done.
Total 5 (delta 2), reused 0 (delta 0)
To ssh://snc@server.company.com/repo/git/project
   228d9b1..375bdf4  master -> master

如您所见,即使我只提交了我的 1 个文件 (my-file.rb),我的推送也会导致我的 1 个文件的提交以及之前由其他人推送的这 3 个文件的合并。那么我使用 git 错了吗?就像我说的,我以前从未见过这个问题。

【问题讨论】:

    标签: git git-merge git-push


    【解决方案1】:

    当两个分支分叉而你合并它们时,git 需要创建一个合并提交。

    例如:

    master            /--* (Your commit)      ----* (merged commit)
    origin/master  ------* (Colleague commit) --/
    

    这是因为这两个提交是来自同一个父提交的分支,所以 git 会在合并这两个分支时创建一个中间合并提交。

    为了防止这种额外的提交,您通常会这样做:

    git checkout master # Your local branch
    git fetch origin    # Fetch the head of origin/master
    git rebase origin/master
    # Fix any conflicts
    git push
    

    这样做是为了覆盖您的分支,以便您的提交看起来像写在您的大学提交之上。 rebase 之后的三个会是这样的

    master --* (Colleague commit) --* (Your commit)
    

    【讨论】:

    • 当我有未包含在提交中的未暂存更改时,git rebase origin/master 不起作用。这对我不起作用,因为我经常有未分阶段的更改。
    • 我尝试了几次来正确解决这个问题,但这似乎是正确的方法。将我的编辑拆分为多个提交,然后进行一次推送使生活变得更加轻松。 'git pull && git push' 的概念似乎暗示“提交、推送、提交、推送、提交、推送”而不是“提交、提交、提交、推送”,我认为在大多数情况下对于项目来说这不是正确的方法我正在努力。
    【解决方案2】:

    我建议您将操作分开。

    我曾在多家商店工作过,但从未将其视为一种常见做法(或根本没有)。

    事实上,有几个地方甚至不喜欢git pull,他们更喜欢将git fetchgit merge 操作(pull 本身结合在一起)分开。

    我建议您查看 git 工作流帖子以指导您。寻找有很多赞的 q/a。

    这篇文章可能会有所帮助:git branch, fork, fetch, merge, rebase and clone, what are the differences?

    【讨论】:

      猜你喜欢
      • 2017-12-25
      • 2014-03-09
      • 1970-01-01
      • 2012-06-24
      • 1970-01-01
      • 2013-11-20
      • 1970-01-01
      • 2015-03-11
      • 2017-03-09
      相关资源
      最近更新 更多