不说没有说哪个分支反对

时间:2012-07-10 05:34:00

标签: git

我编写了一个可以进行变基的脚本。

当我运行$ 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>

我有主分支(工作副本)然后我创建了rohan_branch1;好像在某些时候我在主人身上做过变换。

现在我想让rohan_branch1保持最新状态。我怎样才能摆脱这个错误?

1 个答案:

答案 0 :(得分:3)

如果你想在拉(git pull --rebase)时进行重组,你需要有一个上游分支与你要拉到的本地分支相关联:

git branch --set-upstream rohan_branch1 nickname/anotherBranch

(正如CharlesB在“git rebase origin” vs.“git rebase origin/master”中所述

从那里,您可以考虑来自gup script (from "gup: A friendlier git pull --rebase")Jason Weathered

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,而是管理未跟踪的文件(存储),并在重新定位时保留合并提交(git rebase -p)。 (请参阅“Rebasing Merge Commits in Git”)中的“Envato Notes blog