2

私はgit-svnを使用しています。私は通常、トピック ブランチを作成し、それにコミットしてから、master をチェックアウトし、git svn rebase、git merge --squash topic_branch、git commit -m "summary comment"、そして git svn dcommit を実行します。

それはうまくいきますが、ブランチの変更をマスターにマージしたことをgitは認識していないようです。私はsvnを使わずにこれを試しました:

# Make a repository, add a couple files
$ mkdir gittest
$ cd gittest
$ git init
$ touch foo bar
$ git add .
$ git commit -m "initial version"

# Make a branch, change a file, commit.
$ git checkout -b a_branch
$ vi foo # make a change
$ git commit -am "a change"

# Merge changes into master
$ git checkout master
$ git merge --squash a_branch
$ git commit -m "merged a_branch"

gitk --all はこれを示しています。これは、git-svn の問題ではないことを示しています。

明らかにマージされていないブランチを示す gitk 画像
(出典: selfamusementpark.com )

私のメイン (git-svn) プロジェクトでは、マージされたように見えるいくつかの変更が早い段階で見られますが、当時はそうではなかったので、今は何をしているのかわかりません。(問題がある場合、これは Ubuntu Jaunty の git 1.6.0.4 です。)

4

4 に答える 4

8

を使ったからだと思います--squash。なぜそうしたのかわかりませんが、そうする必要はありません。--squashgit mergeのドキュメントから:

実際のマージが発生したかのように作業ツリーとインデックスの状態を生成しますが、実際にはコミットを作成したり、HEAD を移動したり、$GIT_DIR/MERGE_HEAD を記録して次の git commit コマンドでマージ コミットを作成したりしません。これにより、現在のブランチの上に単一のコミットを作成できます。その効果は、別のブランチをマージするのと同じです (タコの場合はそれ以上)。

基本的に、「適切な」マージを行う必要があります。スカッシングには、かなり特殊な使用状況があるようです (私は一度も経験したことがないので、なぜそれが役立つのかについてコメントすることはできません)。ブランチでいくつかの作業を行った後、より包括的な作業を行っている別のブランチにマージすることにした場合に、ブランチ ツリーが乱雑に見えないようにしたい場合だと思います

于 2009-05-23T17:31:00.003 に答える
3

使用しないでくださいgit merge --squash:)

于 2009-05-23T17:31:40.923 に答える