7

私は通常、によってそれを行いecho ref: refs/heads/new_branch > .git/HEADます。適切に行う方法は?

いくつかの使用例:

  1. 他の場所からソース コードをインポートしましたが、それを Git にコミットします (現在のブランチにはコミットしません)。
  2. あなた.gitは単なるシンボリックリンクであり、他のworkdirからアクセスしています(適切に行うためにgit-new-workdirについてはすでに知っています)

したがって、次のコミットが持つべき親と、それによって更新される参照を手動で選択する必要があります。

4

4 に答える 4

5

このgitための配管コマンドは次のとおりです。

git symbolic-ref HEAD refs/heads/existing_branch

デタッチされたヘッド状態になることはできません (SHA ではなく ref が必要です)。ただし、存在しない参照 (別名、未知のブランチ) に切り替えることはできます。それを防ぐには、おそらく次を使用しますgit alias

git config --global alias.switch '!f() { git show-ref --heads --verify "refs/heads/$1" && git symbolic-ref -m "switch to branch $1 not touching workdir" HEAD "refs/heads/$1"; }; f'

その後、のように使用できますgit switch existing_branch-mでエントリを表示するオプションが必要であることに注意してくださいgit reflog。これは通常、必要なものです。

ノート:

  • git reflog HEADの参照ログを示しますHEAD(オプションで指定されたコメントが-m再び表示されます)。完全なファイル (失われたコミットを見つけたい場合に備えて、前後の SHA を含む) は$(git rev-parse --git-dir)/logs/HEAD(for HEAD)に保存されます。
  • git show-ref --headsRHS で使用できるすべての参照を一覧表示します。に示すように、引数が適切な (既存の) ref (別名ブランチ) であるかどうかを確認するaliasために使用できます。--verify
  • 注意:パックされた ref のような、またはパックされた ref 内git symbolic-refの他の ref を指すことができます。これはおそらくあなたが望むものではないので、エイリアスはこれを に制限します。refs/tags/refs/remotes/refs/heads/
于 2015-05-18T19:19:53.933 に答える
3

git reset --soft $branch_to_make_HEAD

man git reset--softオプションに関するドキュメント:

インデックス ファイルにも作業ツリーにもまったく触れません (ただし、<commit>すべてのモードと同様に、ヘッドを にリセットします)。これにより、変更されたすべてのファイルが「コミットされる変更」のままになります。

于 2013-05-16T19:29:18.337 に答える
1
git checkout -B existing_or_new_branch # HEAD by default
git reset       existing_branch@{1}    # or anywhere else for a new_branch
于 2015-04-17T22:41:47.913 に答える