私は次のことができるようにしたいです。
他の(リモートまたはローカル)ブランチに基づいて(git branch
またはgit checkout -b
を介して)ローカルブランチを作成します。
ローカルブランチをリモートリポジトリにプッシュ(公開)しますが、追跡可能にするとgit pull
とgit Push
はすぐに動作します。
それ、どうやったら出来るの?
Git 1.7では--set-upstream
を知っていますが、それは作成後のアクションです。私はブランチをリモートリポジトリにプッシュするときに同様の変更を加える方法を見つけたいと思います。
Git 1.7.0以降では、新しいブランチをチェックアウトできます。
git checkout -b <branch>
ファイルを編集し、追加してコミットします。それから -u
を押します(--set-upstream
の略) オプション:
git Push -u Origin <branch>
Gitはプッシュ中にトラッキング情報を設定します。
あなたが他の人とあなたのレポを共有していないのであれば、これは all あなたのブランチをリモートにプッシュし、あなたのために--set-upstream
トラッキングするのに役立ちます:
git Push --all -u
(正確にはOPが求めていたものではありませんが、このワンライナーはかなり人気があります)
あなたが他の人とあなたのレポを共有しているなら、あなたがすべてのあなたの危険な実験的な枝でレポを詰まらせるので、これは本当に良い形式ではありません。
git Push -u
の導入以前は、あなたが望むものを取得するためのgit Push
オプションはありませんでした。新しい設定ステートメントを追加しなければなりませんでした。
次のようにして新しいブランチを作成するとします。
$ git checkout -b branchB
$ git Push Origin branchB:branchB
git config
ファイルを直接編集しないようにするには、.git/config
コマンドを使用できます。
$ git config branch.branchB.remote Origin
$ git config branch.branchB.merge refs/heads/branchB
あるいは、追跡情報をこのブランチに持たせるために.git/config
ファイルを手動で編集することもできます。
[branch "branchB"]
remote = Origin
merge = refs/heads/branchB
簡単に言えば、新しい local ブランチを作成するには、次のようにします。
git branch <branch-name>
remote リポジトリにプッシュするには、次のようにします。
git Push -u Origin <branch-name>
すでにここに与えられている解決策のわずかな変形:
他の(リモートまたはローカル)ブランチに基づいてローカルブランチを作成します。
git checkout -b branchname
ローカルブランチをリモートリポジトリにプッシュ(公開)しますが、追跡可能にするとgit pull
とgit Push
はすぐに動作します。
git Push -u Origin HEAD
HEAD
を使うことは、 "現在のブランチをリモートの同じ名前にプッシュする便利な方法"です。出典: https://git-scm.com/docs/git-Push Gitでは、HEAD(大文字)は現在のブランチ(ツリー)の最上部への参照です。
-u
オプションは--set-setupstream
の略です。これは現在のブランチのアップストリームトラッキング参照を追加します。これを確認するには、.git/configファイルを調べます。
私は単にする
git Push -u Origin localBranch:remoteBranchToBeCreated
すでにクローンされたプロジェクトに.
remoteBranchToBeCreated
で行ったコミットの下で、GitはlocalBranch
という名前の新しいブランチを作成します。
私はあなたがすでに次のようなプロジェクトを複製したと思います:
git clone http://github.com/myproject.git
それからあなたのローカルコピーで、新しいブランチを作成してチェックアウトしてください。
git checkout -b <newbranch>
サーバー上で "git bare --init"を作成し、myapp.gitを作成したと仮定すると、次のようになります。
git remote add Origin ssh://example.com/var/git/myapp.git
git Push Origin master
その後、ユーザーはできるようになります
git clone http://example.com/var/git/myapp.git
注: あなたのサーバーが起動していると仮定します。そうでなければ、うまくいきません。よい手引きは ここ です。
リモートブランチを追加します。
git Push Origin master:new_feature_name
すべてがうまくいっているかチェックしてください(Originを取得してリモートブランチをリストします):
git fetch Origin
git branch -r
ローカルブランチを作成してリモートブランチを追跡します。
git checkout -tb new_feature_name Origin/new_feature_name
すべてを更新する:
git pull
編集 古い、git Push -u Origin $BRANCHNAME
を使う
Williamの雑多なGitツール ( gitorious repo および clone )からgit publish-branch
を使用してください。
さて、Rubyはありません。保障措置を無視してください。 - スクリプトの最後の3行を取り出してbashスクリプトgit-publish-branch
を作成します。
#!/bin/bash
REMOTE=$1 # Rewrite this to make it optional...
BRANCH=$2
# Uncomment the following line to create BRANCH locally first
#git checkout -b ${BRANCH}
git Push ${Origin} ${BRANCH}:refs/heads/${BRANCH} &&
git config branch.${BRANCH}.remote ${REMOTE} &&
git config branch.${BRANCH}.merge refs/heads/${BRANCH}
それからgit-publish-branch REMOTENAME BRANCHNAME
を実行します。ここでREMOTENAMEは通常Originです(Originをデフォルトにするようにスクリプトを修正することができます、など)。
既存のブランチから分岐して新しいブランチを作成する
git checkout -b <new_branch>
次に、この新しいブランチを使ってリポジトリにプッシュします。
git Push -u Origin <new_branch>
これはすべてのローカルコミットを作成し、新しく作成されたリモートブランチにプッシュしますOrigin/<new_branch>
GitLabのバージョンが1.7より前の場合は、次のようにします。
git checkout -b name_branch
(name_branch、例:master
)
それをリモートリポジトリにプッシュするには、次の手順に従います。
git Push -u Origin name_new_branch
(name_new_branch、例:feature
)
エイリアスを作成して、新しいブランチを作成するたびにリモートブランチをプッシュして追跡するようにしました。次のチャンクを.bash_profile
ファイルに入れます。
# Create a new branch, Push to Origin and track that remote branch
publishBranch() {
git checkout -b $1
git Push -u Origin $1
}
alias gcb=publishBranch
用法 :ちょうどgcb thuy/do-sth-kool
と入力してthuy/do-sth-kool
が私の新しいブランチ名になります。
ここでの答えを少し土台にして、このプロセスを単純なBashスクリプトとしてまとめました。もちろん、これはGitのエイリアスとしても使用できます。
私にとって重要な追加は、コミットする前にユニットテストを実行するよう促し、デフォルトで現在のブランチ名を渡すことです。
$ git_Push_new_branch.sh
Have you run your unit tests yet? If so, pass OK or a branch name, and try again
usage: git_Push_new_branch {OK|BRANCH_NAME}
e.g.
git_Push_new_branch -> Displays Prompt reminding you to run unit tests
git_Push_new_branch OK -> Pushes the current branch as a new branch to the Origin
git_Push_new_branch MYBRANCH -> Pushes branch MYBRANCH as a new branch to the Origin
function show_help()
{
IT=$(CAT <<EOF
Have you run your unit tests yet? If so, pass OK or a branch name, and try again
usage: git_Push_new_branch {OK|BRANCH_NAME}
e.g.
git_Push_new_branch.sh -> Displays Prompt reminding you to run unit tests
git_Push_new_branch.sh OK -> Pushes the current branch as a new branch to the Origin
git_Push_new_branch.sh MYBRANCH -> Pushes branch MYBRANCH as a new branch to the Origin
)
echo "$IT"
exit
}
if [ -z "$1" ]
then
show_help
fi
CURR_BRANCH=$(git rev-parse --abbrev-ref HEAD)
if [ "$1" == "OK" ]
then
BRANCH=$CURR_BRANCH
else
BRANCH=${1:-$CURR_BRANCH}
fi
git Push -u Origin $BRANCH