Git 在分支交换机失败后删除了我的文件



通常我会在一个名为test的本地分支上工作,然后在功能完成后将该分支合并到master中。但是,由于某种原因,我丢失了最新的更改。

这是我所做的:

T:Test [test × +4 ~3 -5 !]> git status
On branch test
Your branch is based on 'origin/test', but the upstream is gone.
(use "git branch --unset-upstream" to fixup)
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified:   jest.config.js
modified:   ormconfig.ts
modified:   src/index.ts
deleted:    src/it-portal/entity/Kiwi.ts
deleted:    src/it-portal/entity/Movie.ts
deleted:    src/it-portal/entity/User.ts
deleted:    src/resolvers/HelloWorldResolver.ts
deleted:    src/resolvers/MovieResolver.test.ts
deleted:    src/resolvers/MovieResolver.ts
deleted:    src/tests/Interfaces/global.d.ts
deleted:    src/tests/config/globalSetup.ts
deleted:    src/tests/config/globalTeardown.ts
deleted:    src/tests/config/setupFiles.ts
Untracked files:
(use "git add <file>..." to include in what will be committed)
src/it-portal/entity/Account.ts
src/resolvers/AccountResolver.test.ts
src/resolvers/AccountResolver.ts
src/test-utils/
no changes added to commit (use "git add" and/or "git commit -a")
T:Test [test × +4 ~3 -10 !]> git add .
T:Test [test × +4 ~7 -6 ~]> git commit -am 'added Account entity and resolvers'
[test caaa67a] added Account entity and resolvers
17 files changed, 164 insertions(+), 183 deletions(-)
create mode 100644 src/it-portal/entity/Account.ts
delete mode 100644 src/it-portal/entity/Kiwi.ts
delete mode 100644 src/it-portal/entity/Movie.ts
delete mode 100644 src/it-portal/entity/User.ts
create mode 100644 src/resolvers/AccountResolver.test.ts
create mode 100644 src/resolvers/AccountResolver.ts
delete mode 100644 src/resolvers/HelloWorldResolver.ts
delete mode 100644 src/resolvers/MovieResolver.test.ts
delete mode 100644 src/resolvers/MovieResolver.ts
rename src/{tests => test-utils}/Interfaces/global.d.ts (100%)
rename src/{tests => test-utils}/config/globalSetup.ts (100%)
rename src/{tests => test-utils}/config/globalTeardown.ts (100%)
rename src/{tests => test-utils}/config/setupFiles.ts (100%)
create mode 100644 src/test-utils/helpers/axios.ts
T:Test [test ×]> git checkout master
fatal: cannot create directory at 'src/resolvers': Permission denied
T:Test [test × +3 ~3 -8 !]> git merge test
Already up to date.
T:Tes [test × +3 ~3 -8 !]> git checkout master
error: Your local changes to the following files would be overwritten by checkout:
jest.config.js
ormconfig.ts
src/index.ts
Please commit your changes or stash them before you switch branches.
error: The following untracked working tree files would be overwritten by checkout:
src/it-portal/entity/Kiwi.ts
src/it-portal/entity/Movie.ts
src/it-portal/entity/User.ts
Please move or remove them before you switch branches.
Aborting
T:Test [test × +3 ~3 -8 !]> git log
commit caaa67ae6643b5efa2c7f3bd65a3aa4317037367 (HEAD -> test)
Author: Me <bob@gmail.com>
Date:   Thu Jun 18 14:25:10 2020 +0200
added Account entity and resolvers
commit 724bb33f38f3c380ac07666f0f6c3e5ca8648d8f (origin/master, master)
Author: Me <bob@gmail.com>
Date:   Wed Jun 17 15:27:14 2020 +0200
T:Test [test × +3 ~3 -8 !]> git status
On branch test
Your branch is based on 'origin/test', but the upstream is gone.
(use "git branch --unset-upstream" to fixup)
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified:   jest.config.js
modified:   ormconfig.ts
modified:   src/index.ts
deleted:    src/it-portal/entity/Account.ts
deleted:    src/resolvers/AccountResolver.test.ts
deleted:    src/resolvers/AccountResolver.ts
deleted:    src/test-utils/Interfaces/global.d.ts
deleted:    src/test-utils/config/globalSetup.ts
deleted:    src/test-utils/config/globalTeardown.ts
deleted:    src/test-utils/config/setupFiles.ts
deleted:    src/test-utils/helpers/axios.ts
Untracked files:
(use "git add <file>..." to include in what will be committed)
src/it-portal/entity/Kiwi.ts
src/it-portal/entity/Movie.ts
src/it-portal/entity/User.ts
no changes added to commit (use "git add" and/or "git commit -a")
T:Test [test × +3 ~3 -8 !]> git branch
master
* test

我注意到切换到master分支时出现问题。但是现在,尽管我在测试中进行了正确的提交,并且仍然在分支上test但它没有像Account.ts那样向我显示添加的文件,并且仍然向我显示已删除的文件,例如Kiwi.ts。关于如何解决这个问题的任何想法?

还要检查以下内容,这显示了我不想发生的事情。

T:Test [test × +3 ~3 -8 !]> git checkout test
Switched to branch 'test'
M       jest.config.js
M       ormconfig.ts
M       src/index.ts
D       src/it-portal/entity/Account.ts
D       src/resolvers/AccountResolver.test.ts
D       src/resolvers/AccountResolver.ts
D       src/test-utils/Interfaces/global.d.ts
D       src/test-utils/config/globalSetup.ts
D       src/test-utils/config/globalTeardown.ts
D       src/test-utils/config/setupFiles.ts
D       src/test-utils/helpers/axios.ts
Your branch is based on 'origin/test', but the upstream is gone.
(use "git branch --unset-upstream" to fixup)

会发生什么:

  1. git checkout master由于Permission denied而失败。您可能使用比您特权更高的用户创建新文件,或者由于某些原因,这些文件的权限已被更改/损坏。
    Git 无法执行所需的更改来切换分支并还原master分支的工作树。

  2. git merge test没有任何效果。您从未切换过分支,并且您已经在test分支上。

  3. 第二个git checkout master警告您未提交的更改并停止 switch 分支命令。

  4. git log向您展示了您所做的提交。这是保证您的工作不会丢失,并确认您在test分支上。

  5. git status给你看了一棵乱七八糟的工作树。
    该工作树是第一个git checkout master的结果(在第 1 点(。
    在通常情况下,当由于工作树脏而无法git checkout时,git 会停止操作,恢复工作树并向用户显示它无法更改分支的原因,就像在第 3 点(第二个git checkout(中发生的那样。

最有可能的是,第一个git checkout无法恢复工作树,因为它没有创建文件夹的正确权限,导致工作树混乱。

您有很多方法可以将工作树还原到当前分支中的最后一次提交。
我建议您git reset --hard HEAD完全恢复test分支的工作树,并在尝试任何签出或合并命令之前检查文件的任何权限问题并解决它。

相关内容

最新更新