61

私は本当にギットが好きです。少なくとも、私は git のアイデアが好きです。マスター プロジェクトを別のブランチとしてチェックアウトできるので、他のすべてを台無しにするリスクなしに、必要なものを変更できます。これは素晴らしいことです。しかし、それは機能していません。

基本的に、私のワークフローは次のようになります。

  1. 安定版を新しいブランチにチェックアウトして、新しいコードを試す
  2. たくさんの変更を加えてください - 私はこれを維持するつもりはありません。ただ実験しているだけです。
  3. 私が変更したすべてのものを見てください
  4. 追跡するすべての変更を追加します
  5. ブランチをコミットし、ブランチをオリジンにプッシュします (うまくいった場合は、この手順をスキップしてください)
  6. 別の方法を試すことを決定し、マスターに戻ります
  7. 私は master ブランチにいますが、私が作業していた実験的ブランチからのアーティファクトを観察してください。

ブランチを別のブランチにチェックアウトし、1 つのブランチに変更を加え、元のブランチをチェックアウトするたびに、他のブランチで発生したすべてのファイルと変更が残っています。これは非常にイライラしています。これを実行中にIDEでファイルを開いているとこれが発生する可能性があることを読みましたが、私はそれについてかなり注意しており、IDEでファイルを閉じ、IDEを閉じ、切り替え前にRailsサーバーをシャットダウンしました枝、そしてこれはまだ起こります。また、「git clean -f」を実行すると、任意のコミット後に発生したすべてのものが削除されるか (ランダムに)、最新のケースのように、何も変更されずに元の状態に戻ります。

私は git を正しく使用していると思っていましたが、この時点で、ここで頭がおかしくなりました。プロジェクトの安定版を使用して一連の実験的なコードを操作しようとしていますが、行ったすべての変更を手動で追跡して修正する必要があります。アイデアや提案はありますか?

git checkout -b photo_tagging
git branch # to make sure it's right
# make a bunch of changes, creations, etc
git status # see what's changed since before
git add . # approve of the changes, I guess, since if I do git commit after this, it says no changes
git commit -m 'these are changes I made'

git checkout master
git branch #=> *master

# look at files, tags_controller is still there, added in photo_tagging
# and code added in photo_tagging branch are still there in *master

これは、ブランチでコミットするかどうかに関係なく発生するようです。

4

6 に答える 6

20

git とブランチの使用例を次に示します。

$ git branch
* master
  organize

$ git branch networking
$ git checkout networking

$ git branch
  master
* networking
  organize

誰もがネットワーキングで何かをしたので、マスターは何度も更新されました

$ git pull origin networking
From github.com:dlundquist/Asteroids
 * branch            networking -> FETCH_HEAD
CONFLICT (rename/delete): Rename src/ServerClientThread.java->src/ServerConnectionThread.java in 92d5b7c4e7c4110803eabf5d5152e7f2a337d722 and deleted in HEAD
Auto-merging src/Actor.java
Auto-merging src/Asteroids.java
CONFLICT (content): Merge conflict in src/Asteroids.java
Auto-merging src/BasicWeapon.java
CONFLICT (content): Merge conflict in src/BasicWeapon.java
CONFLICT (delete/modify): src/DedicatedServer.java deleted in HEAD and modified in 92d5b7c4e7c4110803eabf5d5152e7f2a337d722. Version 92d5b7c4e7c4110803eabf5d5152e7f2a337d722 of src/DedicatedServer.java left in tree.
Auto-merging src/MainMenu.java
CONFLICT (content): Merge conflict in src/MainMenu.java
CONFLICT (delete/modify): src/NetworkClientThread.java deleted in HEAD and modified in 92d5b7c4e7c4110803eabf5d5152e7f2a337d722. Version 92d5b7c4e7c4110803eabf5d5152e7f2a337d722 of src/NetworkClientThread.java left in tree.
CONFLICT (delete/modify): src/NetworkUpdate.java deleted in HEAD and modified in 92d5b7c4e7c4110803eabf5d5152e7f2a337d722. Version 92d5b7c4e7c4110803eabf5d5152e7f2a337d722 of src/NetworkUpdate.java left in tree.
Auto-merging src/ScenePanel.java
CONFLICT (content): Merge conflict in src/ScenePanel.java
Auto-merging src/Shield.java
CONFLICT (content): Merge conflict in src/Shield.java
Auto-merging src/Sprite.java
Auto-merging src/TripleShotWeapon.java
Auto-merging src/Weapon.java
Automatic merge failed; fix conflicts and then commit the result.
mjolnir:Asteroids Durandal$ git status
# On branch networking
# Changes to be committed:
#
#   modified:   src/Actor.java
#   modified:   src/Sprite.java
#   modified:   src/TripleShotWeapon.java
#   modified:   src/Weapon.java
#
# Unmerged paths:
#   (use "git add/rm <file>..." as appropriate to mark resolution)
#
#   both modified:      src/Asteroids.java
#   both modified:      src/BasicWeapon.java
#   deleted by us:      src/DedicatedServer.java
#   both modified:      src/MainMenu.java
#   deleted by us:      src/NetworkClientThread.java
#   deleted by us:      src/NetworkUpdate.java
#   both modified:      src/ScenePanel.java
#   added by them:      src/ServerConnectionThread.java
#   both modified:      src/Shield.java

すごい、git は本当に怒っています。git がすべての作業を行うには、Master が Networking よりもはるかに先を行っているようです。

$ git reset --hard networking
HEAD is now at 20d6ee8 done tweaking game on the main branch.  Fixed a few bugs with the TripleShotWeapon.  Rebalanced the gameMechanics() in Asteroids to increase the difficulty as the levels increase.
mjolnir:Asteroids Durandal$ git status
# On branch networking
nothing to commit (working directory clean)

さて、ネットワークが最後にオリジンにプッシュされた「時間」に戻りました。しかし、作業を行う前に、マスターに戻ってマージする必要があります。そうでなければ、マージすることさえ難しくなります。

ファイルのマージに費やされた時間

$ git add (insert conflict resolved files here)
$ git commit -a -m "Merged networking with master"
$ git checkout master
$ git branch
* master
  networking
  organize

では、変更を適用しましょう。

$ git merge networking
Already up-to-date.

「うん!」が好きなら、これをやりたいかもしれません。

$ git merge origin networking
Already up-to-date. Yeeah!

私たちの変化を世界に広める

$ git push origin master
于 2010-12-23T03:51:07.390 に答える