0

私は 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を間違って使用していますか? 私が言ったように、私は前にこの問題を見たことがありません。

4

2 に答える 2

1

2 つのブランチが分岐し、それらをマージする場合、git はマージ コミットを作成する必要があります。

例えば:

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

これは、2 つのコミットが同じ親コミットのブランチであるためです。したがって、git はこれら 2 つのブランチをマージするときに中間マージ コミットを作成します。

この余分なコミットを防ぐには、通常、次のようにします。

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

これが行っているのは、ブランチを上書きして、コミットが大学のコミットの上に書かれているように見えるようにすることです。リベース後の3つは次のようになります

master --* (Colleague commit) --* (Your commit)
于 2013-11-08T18:23:53.020 に答える