我似乎在一个新的回购中失去了我下午的工作.这是我做的:
git initgit add src git remote add origin git@github.com:Synesso/memx.gitgit pull origin mastergit add .gitignoregit commit -m 'updated ignore'git push origin master我的本地repo和github repo都只提交了两次.初始提交(由github在项目创建时创建)和第二个仅包含文件的提交.gitignore.
步骤4(git add src)中添加的文件不存在.它们似乎也没有上演.
你做的时候丢失了分段文件git pull吗?我可以以某种方式检索它们吗?
当前状态:
$ git status
# On branch master
nothing to commit (working directory clean)
Run Code Online (Sandbox Code Playgroud)
我的初学者add不在reflog中.
$ git reflog
c80135d HEAD@{0}: checkout: moving from 999d128ea4e6969f9eacbceebb5f857f2aa5abb0 to master
999d128 HEAD@{1}: checkout: moving from master to HEAD~1
c80135d HEAD@{2}: checkout: moving from 999d128ea4e6969f9eacbceebb5f857f2aa5abb0 to master
999d128 HEAD@{3}: checkout: moving from master to 999d128ea4e6969f9eacbceebb5f857f2aa5abb0
c80135d HEAD@{4}: commit (amend): updated ignore
28b4f90 HEAD@{5}: commit: updated ignore
999d128 HEAD@{6}: initial pull
Run Code Online (Sandbox Code Playgroud)
history显示我添加了src文件夹,但没有提交它:
223 git init
225 git add src
229 git add project/Build.scala
234 git remote add origin git@github.com:Synesso/memx.git
250 git pull origin master
Run Code Online (Sandbox Code Playgroud)
我知道如果你尝试使用脏文件,git会抱怨.但是做一个会消除分阶段文件的拉动是可以的吗?这似乎是错的.
我刚刚再次测试了这个过程,是的,它会破坏分阶段的文件.
jem@jem-usb:~/projects$ mkdir x
jem@jem-usb:~/projects$ cd x
jem@jem-usb:~/projects/x$ git init
Initialized empty Git repository in /home/jem/projects/x/.git/
jem@jem-usb:~/projects/x$ echo "hi" > hello.world
jem@jem-usb:~/projects/x$ git add hello.world
jem@jem-usb:~/projects/x$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: hello.world
#
jem@jem-usb:~/projects/x$ ls -asl
total 24
4 drwxrwxr-x 3 jem jem 4096 Apr 28 20:56 .
4 drwxr-xr-x 8 jem jem 4096 Apr 28 20:56 ..
4 drwxrwxr-x 7 jem jem 4096 Apr 28 20:56 .git
12 -rw-rw-r-- 1 jem jem 3 Apr 28 20:56 hello.world
jem@jem-usb:~/projects/x$ git remote add origin git@github.com:Synesso/memx.git
jem@jem-usb:~/projects/x$ git reflog
fatal: bad default revision 'HEAD'
jem@jem-usb:~/projects/x$ git pull origin master
remote: Counting objects: 7, done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 7 (delta 0), reused 3 (delta 0)
Unpacking objects: 100% (7/7), done.
From github.com:Synesso/memx
* branch master -> FETCH_HEAD
jem@jem-usb:~/projects/x$ ls -asl
total 36
4 drwxrwxr-x 3 jem jem 4096 Apr 28 20:53 .
4 drwxr-xr-x 8 jem jem 4096 Apr 28 20:52 ..
4 drwxrwxr-x 8 jem jem 4096 Apr 28 20:53 .git
12 -rw-rw-r-- 1 jem jem 59 Apr 28 20:53 .gitignore
12 -rw-rw-r-- 1 jem jem 9 Apr 28 20:53 README.md
jem@jem-usb:~/projects/x$ git reflog
c80135d HEAD@{0}: initial pull
Run Code Online (Sandbox Code Playgroud)
该文件hello.world已删除,没有警告.
我能够在不使用github的情况下重现这一点,使用两台主机(这里重命名为hostB,即"远程")和hostA,即"本地":
hostB$ cd /tmp; mkdir repo; cd repo; git init
Initialized empty Git repository in /tmp/repo/.git/
hostB$ : > .gitignore; echo this is a readme > README.md
hostB$ git add .; git commit -m initial
[master (root-commit) 58d43bd] initial
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 .gitignore
create mode 100644 README.md
hostA$ cd /tmp; mkdir repo; cd repo; git init
Initialized empty Git repository in /tmp/repo/.git/
hostA$ echo hi > hello.world
hostA$ git add hello.world
hostA$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: hello.world
#
hostA$ git remote add origin ssh://hostB.dom.ain/tmp/repo
hostA$ git pull origin master
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 4 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (4/4), done.
From ssh://hostB.dom.ain/tmp/repo
* branch master -> FETCH_HEAD
hostA$ ls
README.md
Run Code Online (Sandbox Code Playgroud)
重要提示:您可以使用git fsck --lost-found恢复已暂存的文件:
hostA$ git fsck --lost-found
Checking object directories: 100% (256/256), done.
dangling blob 45b983be36b73c0788dc9cbcb76cbb80fc7bb057
hostA$
Run Code Online (Sandbox Code Playgroud)
果然,如果你检查blob(现在已经恢复.git/lost-found/other),那些将会丢失你的东西.(任何目录结构都会消失,你必须找出哪个文件是哪个,并将它们重新放在你想要的位置.)
有趣的是,如果你git fetch origin跟着git merge origin/master它,它会获取原始的初始版本(在这种情况下使用来自hostB的.gitignore和README.md文件)并保留"要提交的更改".支持git fetch其次的另一个原因是git merge什么?:-)
| 归档时间: |
|
| 查看次数: |
1483 次 |
| 最近记录: |