我第一次参加使用GIT的项目。 也许GIT抛弃了我上周的工作。我和一些版本管理员(SVN,Clearcase ......)合作过,我从来没有丢过任何东西,所以我希望我能保存我的工作。
我必须对现有项目进行一些编程。我克隆并研究它。我修改了一些文件,并重命名了一些文件。我做了一些提交。当我想推进BRANCH_B时,我注意到这是不可能的,因为我在BRANCH_A上。所以我继续BRANCH_B:
user@user MINGW64 /c/git_workspace/my-prj (BRANCH_A)
$ git checkout BRANCH_B
fatal: cannot create directory at 'prj/path/to/': Permission denied
user@user MINGW64 /c/git_workspace/my-prj (BRANCH_A)
$ git checkout BRANCH_B
error: Your local changes to the following files would be overwritten by checkout:
modified: prj/path/to/modified_file1.java
...
modified: prj/path/to/modified_fileN.java
Please, commit your changes or stash them before you can switch branches.
Aborting
好的,所以有些东西不起作用而且被中止了。什么都没发生,我还在BRANCH_A。 它甚至没有要求确认,所以我不需要担心任何事情。 让我们尝试一下状态:
user@user MINGW64 /c/git_workspace/my-prj (BRANCH_A)
$ git status
On branch BRANCH_A
Your branch is ahead of 'origin/BRANCH_A' by 18 commits.
(use "git push" to publish your local commits)
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: prj/path/to/modified_file1.java
...
modified: prj/path/to/modified_fileN.java
deleted: prj/path/to/renamed_file1.java
...
deleted: prj/path/to/renamed_fileN.java
no changes added to commit (use "git add" and/or "git commit -a")
但在我的电脑上,上周的所有变化都丢失了!所以我试着“撤消”上一个命令:
user@user MINGW64 /c/git_workspace/my-prj (BRANCH_A)
$ git checkout BRANCH_A
M prj/path/to/modified_file1.java
M ...
M prj/path/to/modified_fileN.java
D prj/path/to/renamed_file1.java
D ...
D prj/path/to/renamed_fileN.java
Already on 'BRANCH_A'
Your branch is ahead of 'origin/BRANCH_A' by 18 commits.
(use "git push" to publish your local commits)
user@user MINGW64 /c/git_workspace/my-prj (BRANCH_A)
$ cd prj/path/to/
bash: cd: prj/path/to/: No such file or directory
但我的改变没有回来。
- 问题:发生了什么以及如何备份我的更改?
注意:
我给了第一个命令两次,但我不记得为什么,我不知道为什么它第一次不起作用但第二次“工作”。我注意到只有在开始写这里之后。 更新:现在我记得freecommander第一次打开目录,这就是没有写作权限的原因。(对不起)
正如您所注意到的,我从未真正离开过BRANCH_A。
一个希望。我有gitk:在其中我看到BRANCH_A是一个黄点,然后我可以看到一个带有名称的红点:«本地未提交的更改,未签入索引»。在那里,我可以看到与我的文件的差异。我不知道为什么它说他们没有承诺,因为我承诺了几次。我可以复制粘贴差异......
答案 0 :(得分:3)
假设您的所有更改&#34;来自上周&#34;已经提交到BRANCH_A
上的存储库,您可以通过运行git reset --hard
将其返回到工作目录中。 如果您没有从上周提交更改,请不要执行此操作,因为这可能会导致其被删除。如果您不确定,可以保存所有内容通过运行git stash save
,您当前未提交的更改为临时存储。这样更安全,但如果您确定已经提交了以前的更改,则没有必要。
至于为何结账失败的原因,由于某种权限错误,听起来第一次部分失败。我并不完全了解Windows上的权限模型,但我建议您检查您正在使用的文件夹的属性,以确保您对该文件夹和所有子文件夹具有完全读/写权限。或者,也许可以尝试将存储库移动到Documents文件夹,或者将当前用户有权修改而无需管理员权限。
第二次结帐失败是由于第一次失败的结帐创建的文件发生了变化,因此在修复第一个错误并将工作目录重置回BRANCH_A
后,失败就不会成为问题
答案 1 :(得分:0)
感谢您的建议;我问了一位同事,最后我解决了以下问题:
#First of all, thanks to gitk i saw all changes i did with my work; I copy-pasted them in a txt file as backup. Then i went to the console:
#I am on BRANCH_A
$ git reset --hard # I wouldn't do this without a backup copy of my changes in a safe place
$ git checkout BRANCH_B
#I am on BRANCH_B, I try a merge
$ git merge BRANCH_A
$ git push origin BRANCH_B
#Now all my changes are on branch_B, where they should
在我的本地 BRANCH_A中,我也看到了一些应该只在BRANCH_B上进行的更改,但这并不重要,因为我不会在&#34;真实&#34; BRANCH_A和世界其他地方只会在BRANCH_B上看到它们(根据我的理解)。