1

リベースを行うスクリプトを作成しました。

を実行する$ my-rebaseと、次のエラーが表示されます。

リベースするブランチを教えずにプルするように頼まれましたが、構成ファイルの「branch.rohan_branch1.merge」も教えてくれません。コマンド ラインで使用するブランチを指定して、再試行してください (例: 'git pull')。詳細については、git-pull(1) を参照してください。

同じブランチに対して頻繁にリベースする場合は、構成ファイルで次のようなものを使用することをお勧めします。

[branch "rohan_branch1"]
remote = <nickname>
merge = <remote-ref>
rebase = true

[remote "<nickname>"]
url = <url>
fetch = <refspec>

master ブランチ (作業コピー) があり、rohan_branch1; を作成しました。ある時点でマスターでリベースを行ったようです。

今、rohan_branch1 を最新の状態に保ちたいと思っています。このエラーを取り除くにはどうすればよいですか?

4

1 に答える 1

3

()をプルするときにリベースする場合git pull --rebaseは、プル先のローカルブランチに関連付けられたアップストリームブランチが必要です。

git branch --set-upstream rohan_branch1 nickname/anotherBranch

CharlesBが「<code>gitrebaseorigin」と「<code>gitrebaseorigin / master」</a>」で説明しているように)

そこから、 Jason Weatheredのgupスクリプト(「gup:友好的git pull --rebase」から)を検討できます。

function gup
{
  # subshell for `set -e` and `trap`
  (
    set -e # fail immediately if there's a problem


    # use `git-up` if installed
    if type git-up > /dev/null 2>&1
    then
      exec git-up
    fi


    # fetch upstream changes
    git fetch


    BRANCH=$(git symbolic-ref -q HEAD)
    BRANCH=${BRANCH##refs/heads/}
    BRANCH=${BRANCH:-HEAD}


    if [ -z "$(git config branch.$BRANCH.remote)" -o -z "$(git config branch.$BRANCH.merge)" ]
    then
      echo "\"$BRANCH\" is not a tracking branch." >&2
      exit 1
    fi


    # create a temp file for capturing command output
    TEMPFILE="`mktemp -t gup.XXXXXX`"
    trap '{ rm -f "$TEMPFILE"; }' EXIT


    # if we're behind upstream, we need to update
    if git status | grep "# Your branch" > "$TEMPFILE"
    then


      # extract tracking branch from message
      UPSTREAM=$(cat "$TEMPFILE" | cut -d "'" -f 2)
      if [ -z "$UPSTREAM" ]
      then
        echo Could not detect upstream branch >&2
        exit 1
      fi


      # can we fast-forward?
      CAN_FF=1
      grep -q "can be fast-forwarded" "$TEMPFILE" || CAN_FF=0


      # stash any uncommitted changes
      git stash | tee "$TEMPFILE"
      [ "${PIPESTATUS[0]}" -eq 0 ] || exit 1


      # take note if anything was stashed
      HAVE_STASH=0
      grep -q "No local changes" "$TEMPFILE" || HAVE_STASH=1


      if [ "$CAN_FF" -ne 0 ]
      then
        # if nothing has changed locally, just fast foward.
        git merge --ff "$UPSTREAM"
      else
        # rebase our changes on top of upstream, but keep any merges
        git rebase -p "$UPSTREAM"
      fi


      # restore any stashed changes
      if [ "$HAVE_STASH" -ne 0 ]
      then
        git stash pop
      fi


    fi


  )
}

git pull --rebaseを直接呼び出す代わりに、追跡されていないファイル(stash)を管理し、リベースgit rebase -p時にマージコミット()を保持します。
(「EnvatoNotesブログ」の「Gitでのマージコミットのリベース」を参照してください)

于 2012-07-10T06:28:39.037 に答える