git plush('git pull&& git push')合并已经提交的文件

时间:2013-11-08 17:24:23

标签: git git-merge git-push

我对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错了吗?就像我说的那样,我以前从未见过这个问题。

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

我建议您将操作分开。

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

事实上,有些地方甚至不喜欢git pull,他们更愿意保持git fetchgit merge操作(pull本身结合),分开。

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

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