2016-05-02 19 views
0

私は、既存のgitリポジトリ内の既知のブランチに変更する一連のgitコマンドを考え出しています。私が知っている3つの事があります:git repoの更新されたブランチを取得するには?

  • 私は.gitフォルダ
  • に私がチェックアウトしたいブランチを含むフォルダ内にすでに午前私が行ったすべての一時的(段階的にまたはunstaged)変更を元に戻したいorigin
  • 上に存在しますこのフォルダの内側にあります。

これは私がやっているものです:

git clean -xfd 
git reset HEAD --hard 
git add --all; git stash; git stash drop 
git fetch origin 
git checkout -B $BRANCH 
git pull origin $BRANCH 

はgitのの最小セットは、これを達成するためのコマンドこのですか?これら一連のコマンドが失敗する状況はありますか?あなたが作ることができる

答えて

0

はsimplierです:

git fetch --all --prune 
git pull origin <branch> 

あなたがgit reset --hardを行っている場合は、あなたの作業ディレクトリが

git reset HEAD --hard 

を清掃することになるので、git stashにする必要はありませんget reset --hard
インデックスと作業ツリーをリセットします。
作業ツリー内の追跡されたファイルは、破棄されてから変更されます。


私はこのフォルダ内に作られた任意の(上演またはunstaged)の一時的な変更を元に戻したいです。

あなたは現在の作業ディレクトリに

# small x 
git clean -xfd 

# capital x 
git clean -Xfd 
をきれいにしたい場合は、まだ明示的

それを追加しない限り、すべての非コミットのものは、あなたのブランチに追加されませんので、やるんする必要はありませんが

-x

.gitignore(ディレクトリ単位)と$ GIT_DIR/info/excludeから読み取った標準の無視ルールは使用しないでくださいが、引き続き-eオプションで指定された無視ルールを使用してください。これにより、ビルドされた製品を含め、すべての未追跡のファイルを削除できます。これは、きれいなビルドをテストするための初期の作業ディレクトリを作成するためにgit resetと組み合わせて使うことができます。

-X
Gitのによって無視されたファイルのみを削除します。
これは、最初からすべてを再構築するのに便利ですが、手動で作成したファイルは保持してください。

1

だから、アイデアは、あなたの現在のチェックアウトは完全に化け、潜在的に悪質な状態である可能性があり、そしてあなたはそれを完全に放棄したいですか?

git fetch 
git checkout -f -B branch origin/branch 
git clean -dfx 

は、サブモジュールがない場合に必要なものです。そうした場合、核のオプションが

git read-tree --empty 
git clean -dffx   # <-- two f's, forces submodule removal 
git fetch 
git checkout -B branch origin/branch 
git submodule update --init  

です(編集:クリーン/ツリーを読むために-exec RMを見つけるから切り替え)


このためgit pullを使用しないでください、それはフェッチありません引っ張った履歴を現在のチェックアウトにマージします。 git checkout -B branchを実行すると、現在のチェックアウトbranchとラベル付けされます。その結果、プルは元のブランチに切り替えるのが非常に遠いです。

関連する問題