@@ -116,30 +116,10 @@ call_merge () {
116
116
}
117
117
118
118
finish_rb_merge () {
119
- if test -f " $dotest /stash"
120
- then
121
- stash=$( cat " $dotest /stash" )
122
- git stash apply --index " $stash "
123
- fi
124
119
rm -r " $dotest "
125
120
echo " All done."
126
121
}
127
122
128
- read_stash () {
129
- if test -f " $1 "
130
- then
131
- cat " $1 "
132
- fi
133
- }
134
- unstash_and_exit () {
135
- err=$?
136
- if test -f " $1 " && test $err = 0
137
- then
138
- git stash apply --index " $1 "
139
- fi
140
- exit $err
141
- }
142
-
143
123
is_interactive () {
144
124
test -f " $dotest " /interactive ||
145
125
while case $# ," $1 " in 0,|* ,-i|* ,--interactive) break ;; esac
174
154
finish_rb_merge
175
155
exit
176
156
fi
177
- stash=$( read_stash " .dotest/stash" )
178
157
git am --resolved --3way --resolvemsg=" $RESOLVEMSG "
179
- unstash_and_exit " $stash "
158
+ exit
180
159
;;
181
160
--skip)
182
161
if test -d " $dotest "
195
174
finish_rb_merge
196
175
exit
197
176
fi
198
- stash=$( read_stash " .dotest/stash" )
199
177
git am -3 --skip --resolvemsg=" $RESOLVEMSG "
200
- unstash_and_exit " $stash "
178
+ exit
201
179
;;
202
180
--abort)
203
181
git rerere clear
204
182
if test -d " $dotest "
205
183
then
206
- if test -f " $dotest /stash"
207
- then
208
- stash=$( cat " $dotest /stash" )
209
- fi
210
184
rm -r " $dotest "
211
185
elif test -d .dotest
212
186
then
213
- if test -f " .dotest/stash"
214
- then
215
- stash=$( cat " .dotest/stash" )
216
- fi
217
187
rm -r .dotest
218
188
else
219
189
die " No rebase in progress?"
220
190
fi
221
191
git reset --hard ORIG_HEAD
222
- test -z " $stash " || git stash apply --index " $stash "
223
192
exit
224
193
;;
225
194
--onto)
@@ -285,6 +254,16 @@ else
285
254
fi
286
255
fi
287
256
257
+ # The tree must be really really clean.
258
+ git update-index --refresh || exit
259
+ diff=$( git diff-index --cached --name-status -r HEAD)
260
+ case " $diff " in
261
+ ?* ) echo " cannot rebase: your index is not up-to-date"
262
+ echo " $diff "
263
+ exit 1
264
+ ;;
265
+ esac
266
+
288
267
# The upstream head must be given. Make sure it is valid.
289
268
upstream_name=" $1 "
290
269
upstream=` git rev-parse --verify " ${upstream_name} ^0" ` ||
@@ -294,19 +273,11 @@ upstream=`git rev-parse --verify "${upstream_name}^0"` ||
294
273
onto_name=${newbase-" $upstream_name " }
295
274
onto=$( git rev-parse --verify " ${onto_name} ^0" ) || exit
296
275
297
- # The tree must be clean enough for us to create a stash
298
- stash=$( git stash create) || exit
299
- if test -n " $stash "
300
- then
301
- echo >&2 " Stashed away your working tree changes"
302
- fi
303
-
304
276
# If a hook exists, give it a chance to interrupt
305
277
if test -x " $GIT_DIR /hooks/pre-rebase"
306
278
then
307
279
" $GIT_DIR /hooks/pre-rebase" ${1+" $@ " } || {
308
280
echo >&2 " The pre-rebase hook refused to rebase."
309
- test -z " $stash " || git stash apply --index " $stash "
310
281
exit 1
311
282
}
312
283
fi
315
286
case " $# " in
316
287
2)
317
288
branch_name=" $2 "
318
- git-checkout " $2 " || {
319
- test -z " $stash " || git stash apply --index " $stash "
320
- usage
321
- }
289
+ git-checkout " $2 " || usage
322
290
;;
323
291
* )
324
292
if branch_name=` git symbolic-ref -q HEAD`
@@ -341,7 +309,6 @@ if test "$upstream" = "$onto" && test "$mb" = "$onto" &&
341
309
! git rev-list --parents " $onto " .." $branch " | grep " .* " > /dev/null
342
310
then
343
311
echo >&2 " Current branch $branch_name is up to date."
344
- test -z " $stash " || git stash apply --index " $stash "
345
312
exit 0
346
313
fi
347
314
@@ -361,24 +328,14 @@ git-reset --hard "$onto"
361
328
if test " $mb " = " $branch "
362
329
then
363
330
echo >&2 " Fast-forwarded $branch_name to $onto_name ."
364
- test -z " $stash " || git stash apply --index " $stash "
365
331
exit 0
366
332
fi
367
333
368
334
if test -z " $do_merge "
369
335
then
370
336
git format-patch -k --stdout --full-index --ignore-if-in-upstream " $upstream " ..ORIG_HEAD |
371
337
git am $git_am_opt --binary -3 -k --resolvemsg=" $RESOLVEMSG "
372
- err=$?
373
-
374
- if test $err = 0
375
- then
376
- test -z " $stash " || git stash apply --index " $stash "
377
- exit
378
- else
379
- test -z " $stash " || echo " $stash " > .dotest/stash
380
- exit $err
381
- fi
338
+ exit $?
382
339
fi
383
340
384
341
# start doing a rebase with git-merge
@@ -389,7 +346,6 @@ echo "$onto" > "$dotest/onto"
389
346
echo " $onto_name " > " $dotest /onto_name"
390
347
prev_head=` git rev-parse HEAD^0`
391
348
echo " $prev_head " > " $dotest /prev_head"
392
- test -z " $stash " || echo " $stash " > " $dotest /stash"
393
349
394
350
msgnum=0
395
351
for cmt in ` git rev-list --reverse --no-merges " $upstream " ..ORIG_HEAD`
0 commit comments