文件在 git 次变基尝试后消失
File disappeared after git rebase attempt
我尝试做 git 变基,但在这个过程中丢失了一个文件。不是一个非常重要的文件,但我想了解发生了什么。
我想使用 rebase 命令将分支 'master' 合并到分支 'learning'。
以下是我的操作总结:
是否 git 变基 master,遇到冲突,已解决,尝试继续变基,再次失败并出现更多冲突,added/commited 一个未跟踪的文件,再次变基失败,尝试变基 --skip ,失败,中止变基,最后做了 git 合并,这是成功的。
我在 rebase 期间提交的未跟踪文件 (test.py) 现在不见了。
这里是我的详细操作记录:
$git checkout learning
Switched to branch 'learning'
Your branch is up to date with 'origin/learning'.
$git rebase master
First, rewinding head to replay your work on top of it...
Applying: first commit: changed mnist example trainer
Using index info to reconstruct a base tree...
A examples/mnist-convnet.py
Falling back to patching base and 3-way merge...
Auto-merging examples/basics/mnist-convnet.py
Applying: added print tensor callback to run after each epoch
Using index info to reconstruct a base tree...
A examples/mnist-convnet.py
Falling back to patching base and 3-way merge...
Auto-merging examples/basics/mnist-convnet.py
Applying: trying to make callback for mnist-visualization
Using index info to reconstruct a base tree...
A examples/mnist-convnet.py
A examples/mnist-visualizations.py
Falling back to patching base and 3-way merge...
Auto-merging examples/basics/mnist-visualizations.py
Auto-merging examples/basics/mnist-convnet.py
Applying: still trying to convert visualization into a callback
Using index info to reconstruct a base tree...
A examples/mnist-visualizations.py
Falling back to patching base and 3-way merge...
Auto-merging examples/basics/mnist-visualizations.py
Applying: misc changes to visualization
Using index info to reconstruct a base tree...
A examples/mnist-visualizations.py
Falling back to patching base and 3-way merge...
Auto-merging examples/basics/mnist-visualizations.py
Applying: added VisualizeTensors callback
Using index info to reconstruct a base tree...
A examples/mnist-visualizations.py
Falling back to patching base and 3-way merge...
Auto-merging examples/basics/mnist-visualizations.py
Applying: first commit: changed mnist example trainer
Using index info to reconstruct a base tree...
A examples/mnist-convnet.py
Falling back to patching base and 3-way merge...
No changes -- Patch already applied.
Applying: added print tensor callback to run after each epoch
error: Failed to merge in the changes.
Using index info to reconstruct a base tree...
A examples/mnist-convnet.py
Falling back to patching base and 3-way merge...
Auto-merging examples/basics/mnist-convnet.py
CONFLICT (content): Merge conflict in examples/basics/mnist-convnet.py
Patch failed at 0008 added print tensor callback to run after each epoch
The copy of the patch that failed is found in: .git/rebase-apply/patch
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
$git status
rebase in progress; onto 4142b9e7
You are currently rebasing branch 'learning' on '4142b9e7'.
(fix conflicts and then run "git rebase --continue")
(use "git rebase --skip" to skip this patch)
(use "git rebase --abort" to check out the original branch)
Unmerged paths:
(use "git reset HEAD <file>..." to unstage)
(use "git add <file>..." to mark resolution)
both modified: examples/basics/mnist-convnet.py
Untracked files:
(use "git add <file>..." to include in what will be committed)
examples/basics/test.py
no changes added to commit (use "git add" and/or "git commit -a")
$git add examples\basics\mnist-convnet.py
$git status
rebase in progress; onto 4142b9e7
You are currently rebasing branch 'learning' on '4142b9e7'.
(all conflicts fixed: run "git rebase --continue")
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: examples/basics/mnist-convnet.py
Untracked files:
(use "git add <file>..." to include in what will be committed)
examples/basics/test.py
$git commit -am "fixing mnist-convnet conflict"
[detached HEAD 2835adcc] fixing mnist-convnet conflict
1 file changed, 2 insertions(+), 1 deletion(-)
$git status
rebase in progress; onto 4142b9e7
You are currently rebasing branch 'learning' on '4142b9e7'.
(all conflicts fixed: run "git rebase --continue")
Untracked files:
(use "git add <file>..." to include in what will be committed)
examples/basics/test.py
nothing added to commit but untracked files present (use "git add" to track)
$git rebase --continue
Applying: added print tensor callback to run after each epoch
No changes - did you forget to use 'git add'?
If there is nothing left to stage, chances are that something else
already introduced the same changes; you might want to skip this patch.
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
$git status
rebase in progress; onto 4142b9e7
You are currently rebasing branch 'learning' on '4142b9e7'.
(all conflicts fixed: run "git rebase --continue")
Untracked files:
(use "git add <file>..." to include in what will be committed)
examples/basics/test.py
nothing added to commit but untracked files present (use "git add" to track)
$git add examples\basics\test.py
$git commit -am "added test"
[detached HEAD 9f32ce6d] added test
1 file changed, 23 insertions(+)
create mode 100644 examples/basics/test_FP16_vs_FP32.py
$git status
rebase in progress; onto 4142b9e7
You are currently rebasing branch 'learning' on '4142b9e7'.
(all conflicts fixed: run "git rebase --continue")
nothing to commit, working tree clean
$git rebase --continue
Applying: added print tensor callback to run after each epoch
No changes - did you forget to use 'git add'?
If there is nothing left to stage, chances are that something else
already introduced the same changes; you might want to skip this patch.
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
$git rebase --skip
Applying: trying to make callback for mnist-visualization
error: Failed to merge in the changes.
Using index info to reconstruct a base tree...
A examples/mnist-convnet.py
A examples/mnist-visualizations.py
Falling back to patching base and 3-way merge...
CONFLICT (modify/delete): examples/mnist-visualizations.py deleted in HEAD and modified in
trying to make callback for mnist-visualization. Version trying to make
callback for mnist-visualization of examples/mnist-visualizations.py left in tree.
Auto-merging examples/basics/mnist-convnet.py
CONFLICT (content): Merge conflict in examples/basics/mnist-convnet.py
Patch failed at 0009 trying to make callback for mnist-visualization
The copy of the patch that failed is found in: .git/rebase-apply/patch
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
$git status
rebase in progress; onto 4142b9e7
You are currently rebasing branch 'learning' on '4142b9e7'.
(fix conflicts and then run "git rebase --continue")
(use "git rebase --skip" to skip this patch)
(use "git rebase --abort" to check out the original branch)
Unmerged paths:
(use "git reset HEAD <file>..." to unstage)
(use "git add/rm <file>..." as appropriate to mark resolution)
both modified: examples/basics/mnist-convnet.py
deleted by us: examples/mnist-visualizations.py
no changes added to commit (use "git add" and/or "git commit -a")
$git rebase --abort
$git status
On branch learning
Your branch is up to date with 'origin/learning'.
nothing to commit, working tree clean
$git merge master
Merge made by the 'recursive' strategy.
...
78 files changed, 880 insertions(+), 539 deletions(-)
$dir examples\basics
Directory of \Code\tensorpack\examples\basics
03/01/2018 03:19 PM <DIR> .
03/01/2018 03:19 PM <DIR> ..
03/01/2018 03:19 PM 6,846 cifar-convnet.py
03/01/2018 03:19 PM 5,994 mnist-convnet.py
02/14/2018 12:58 PM 5,828 mnist-tflayers.py
02/12/2018 07:14 PM 3,488 mnist-tfslim.py
03/01/2018 03:01 PM 6,624 mnist-visualizations.py
02/12/2018 07:14 PM 4,166 svhn-digit-convnet.py
02/15/2018 03:43 PM <DIR> train_log
6 File(s) 32,946 bytes
3 Dir(s) 86,909,169,664 bytes free
如您所见,test.py 以前在 examples\basics 中的内容已经消失了。
所以,我想了解两件事:为什么 git rebase 因冲突而失败,但 git merge 却顺利进行?我在 rebase 操作期间提交的未跟踪文件发生了什么?
首先,不会 将 master
合并到 learning
中:git rebase master
将在 [ 之上重播 learning
=11=].
其次,如果你在任何时候 added/committed test.py,你可以 find it back in the reflog. See "Query git reflog for all commits to a specific file".
git rev-list --all -- test.py
第三,在变基期间,你不应该提交,only to add, then git rebase --continue。
另一种情况:“git rebase
BASE BRANCH
” rebased/updated BRANCH
的小费查了一下,即使 BRANCH
在不同的工作树中检出 .
This has been corrected with Git 2.26 (Q1 2020),
参见 commit b5cabb4, commit df126ca (23 Feb 2020) by Eric Sunshine (sunshineco
)。
(由 Junio C Hamano -- gitster
-- in commit a0ab37d 合并,2020 年 3 月 5 日)
rebase
: refuse to switch to branch already checked out elsewhere
Reported-by: Mike Hommey
Signed-off-by: Eric Sunshine
The invocation "git rebase
<upstream> <branch>
" switches to before performing the rebase operation.
However, unlike git switch
, git checkout
, and git worktree
which all refuse to switch to a branch that is already checked out in some other worktree, git rebase
switches to <branch>
unconditionally.
Curb this careless behavior by making git rebase
also refuse to switch to a branch checked out elsewhere.
我尝试做 git 变基,但在这个过程中丢失了一个文件。不是一个非常重要的文件,但我想了解发生了什么。
我想使用 rebase 命令将分支 'master' 合并到分支 'learning'。
以下是我的操作总结:
是否 git 变基 master,遇到冲突,已解决,尝试继续变基,再次失败并出现更多冲突,added/commited 一个未跟踪的文件,再次变基失败,尝试变基 --skip ,失败,中止变基,最后做了 git 合并,这是成功的。
我在 rebase 期间提交的未跟踪文件 (test.py) 现在不见了。
这里是我的详细操作记录:
$git checkout learning
Switched to branch 'learning'
Your branch is up to date with 'origin/learning'.
$git rebase master
First, rewinding head to replay your work on top of it...
Applying: first commit: changed mnist example trainer
Using index info to reconstruct a base tree...
A examples/mnist-convnet.py
Falling back to patching base and 3-way merge...
Auto-merging examples/basics/mnist-convnet.py
Applying: added print tensor callback to run after each epoch
Using index info to reconstruct a base tree...
A examples/mnist-convnet.py
Falling back to patching base and 3-way merge...
Auto-merging examples/basics/mnist-convnet.py
Applying: trying to make callback for mnist-visualization
Using index info to reconstruct a base tree...
A examples/mnist-convnet.py
A examples/mnist-visualizations.py
Falling back to patching base and 3-way merge...
Auto-merging examples/basics/mnist-visualizations.py
Auto-merging examples/basics/mnist-convnet.py
Applying: still trying to convert visualization into a callback
Using index info to reconstruct a base tree...
A examples/mnist-visualizations.py
Falling back to patching base and 3-way merge...
Auto-merging examples/basics/mnist-visualizations.py
Applying: misc changes to visualization
Using index info to reconstruct a base tree...
A examples/mnist-visualizations.py
Falling back to patching base and 3-way merge...
Auto-merging examples/basics/mnist-visualizations.py
Applying: added VisualizeTensors callback
Using index info to reconstruct a base tree...
A examples/mnist-visualizations.py
Falling back to patching base and 3-way merge...
Auto-merging examples/basics/mnist-visualizations.py
Applying: first commit: changed mnist example trainer
Using index info to reconstruct a base tree...
A examples/mnist-convnet.py
Falling back to patching base and 3-way merge...
No changes -- Patch already applied.
Applying: added print tensor callback to run after each epoch
error: Failed to merge in the changes.
Using index info to reconstruct a base tree...
A examples/mnist-convnet.py
Falling back to patching base and 3-way merge...
Auto-merging examples/basics/mnist-convnet.py
CONFLICT (content): Merge conflict in examples/basics/mnist-convnet.py
Patch failed at 0008 added print tensor callback to run after each epoch
The copy of the patch that failed is found in: .git/rebase-apply/patch
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
$git status
rebase in progress; onto 4142b9e7
You are currently rebasing branch 'learning' on '4142b9e7'.
(fix conflicts and then run "git rebase --continue")
(use "git rebase --skip" to skip this patch)
(use "git rebase --abort" to check out the original branch)
Unmerged paths:
(use "git reset HEAD <file>..." to unstage)
(use "git add <file>..." to mark resolution)
both modified: examples/basics/mnist-convnet.py
Untracked files:
(use "git add <file>..." to include in what will be committed)
examples/basics/test.py
no changes added to commit (use "git add" and/or "git commit -a")
$git add examples\basics\mnist-convnet.py
$git status
rebase in progress; onto 4142b9e7
You are currently rebasing branch 'learning' on '4142b9e7'.
(all conflicts fixed: run "git rebase --continue")
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: examples/basics/mnist-convnet.py
Untracked files:
(use "git add <file>..." to include in what will be committed)
examples/basics/test.py
$git commit -am "fixing mnist-convnet conflict"
[detached HEAD 2835adcc] fixing mnist-convnet conflict
1 file changed, 2 insertions(+), 1 deletion(-)
$git status
rebase in progress; onto 4142b9e7
You are currently rebasing branch 'learning' on '4142b9e7'.
(all conflicts fixed: run "git rebase --continue")
Untracked files:
(use "git add <file>..." to include in what will be committed)
examples/basics/test.py
nothing added to commit but untracked files present (use "git add" to track)
$git rebase --continue
Applying: added print tensor callback to run after each epoch
No changes - did you forget to use 'git add'?
If there is nothing left to stage, chances are that something else
already introduced the same changes; you might want to skip this patch.
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
$git status
rebase in progress; onto 4142b9e7
You are currently rebasing branch 'learning' on '4142b9e7'.
(all conflicts fixed: run "git rebase --continue")
Untracked files:
(use "git add <file>..." to include in what will be committed)
examples/basics/test.py
nothing added to commit but untracked files present (use "git add" to track)
$git add examples\basics\test.py
$git commit -am "added test"
[detached HEAD 9f32ce6d] added test
1 file changed, 23 insertions(+)
create mode 100644 examples/basics/test_FP16_vs_FP32.py
$git status
rebase in progress; onto 4142b9e7
You are currently rebasing branch 'learning' on '4142b9e7'.
(all conflicts fixed: run "git rebase --continue")
nothing to commit, working tree clean
$git rebase --continue
Applying: added print tensor callback to run after each epoch
No changes - did you forget to use 'git add'?
If there is nothing left to stage, chances are that something else
already introduced the same changes; you might want to skip this patch.
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
$git rebase --skip
Applying: trying to make callback for mnist-visualization
error: Failed to merge in the changes.
Using index info to reconstruct a base tree...
A examples/mnist-convnet.py
A examples/mnist-visualizations.py
Falling back to patching base and 3-way merge...
CONFLICT (modify/delete): examples/mnist-visualizations.py deleted in HEAD and modified in
trying to make callback for mnist-visualization. Version trying to make
callback for mnist-visualization of examples/mnist-visualizations.py left in tree.
Auto-merging examples/basics/mnist-convnet.py
CONFLICT (content): Merge conflict in examples/basics/mnist-convnet.py
Patch failed at 0009 trying to make callback for mnist-visualization
The copy of the patch that failed is found in: .git/rebase-apply/patch
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
$git status
rebase in progress; onto 4142b9e7
You are currently rebasing branch 'learning' on '4142b9e7'.
(fix conflicts and then run "git rebase --continue")
(use "git rebase --skip" to skip this patch)
(use "git rebase --abort" to check out the original branch)
Unmerged paths:
(use "git reset HEAD <file>..." to unstage)
(use "git add/rm <file>..." as appropriate to mark resolution)
both modified: examples/basics/mnist-convnet.py
deleted by us: examples/mnist-visualizations.py
no changes added to commit (use "git add" and/or "git commit -a")
$git rebase --abort
$git status
On branch learning
Your branch is up to date with 'origin/learning'.
nothing to commit, working tree clean
$git merge master
Merge made by the 'recursive' strategy.
...
78 files changed, 880 insertions(+), 539 deletions(-)
$dir examples\basics
Directory of \Code\tensorpack\examples\basics
03/01/2018 03:19 PM <DIR> .
03/01/2018 03:19 PM <DIR> ..
03/01/2018 03:19 PM 6,846 cifar-convnet.py
03/01/2018 03:19 PM 5,994 mnist-convnet.py
02/14/2018 12:58 PM 5,828 mnist-tflayers.py
02/12/2018 07:14 PM 3,488 mnist-tfslim.py
03/01/2018 03:01 PM 6,624 mnist-visualizations.py
02/12/2018 07:14 PM 4,166 svhn-digit-convnet.py
02/15/2018 03:43 PM <DIR> train_log
6 File(s) 32,946 bytes
3 Dir(s) 86,909,169,664 bytes free
如您所见,test.py 以前在 examples\basics 中的内容已经消失了。
所以,我想了解两件事:为什么 git rebase 因冲突而失败,但 git merge 却顺利进行?我在 rebase 操作期间提交的未跟踪文件发生了什么?
首先,不会 将 master
合并到 learning
中:git rebase master
将在 [ 之上重播 learning
=11=].
其次,如果你在任何时候 added/committed test.py,你可以 find it back in the reflog. See "Query git reflog for all commits to a specific file".
git rev-list --all -- test.py
第三,在变基期间,你不应该提交,only to add, then git rebase --continue。
另一种情况:“git rebase
BASE BRANCH
” rebased/updated BRANCH
的小费查了一下,即使 BRANCH
在不同的工作树中检出 .
This has been corrected with Git 2.26 (Q1 2020),
参见 commit b5cabb4, commit df126ca (23 Feb 2020) by Eric Sunshine (sunshineco
)。
(由 Junio C Hamano -- gitster
-- in commit a0ab37d 合并,2020 年 3 月 5 日)
rebase
: refuse to switch to branch already checked out elsewhereReported-by: Mike Hommey
Signed-off-by: Eric SunshineThe invocation "
git rebase
<upstream> <branch>
" switches to before performing the rebase operation.However, unlike
git switch
,git checkout
, andgit worktree
which all refuse to switch to a branch that is already checked out in some other worktree,git rebase
switches to<branch>
unconditionally.Curb this careless behavior by making
git rebase
also refuse to switch to a branch checked out elsewhere.