我编写了一个可以进行变基的脚本。
当我运行$ 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保持最新状态。我怎样才能摆脱这个错误?
答案 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”