Git 阶段文件,然后远程添加,然后拉-和我的文件都消失了
我似乎在一次新的回购中失去了下午的工作。以下是我所做的:Git 阶段文件,然后远程添加,然后拉-和我的文件都消失了,git,github,Git,Github,我似乎在一次新的回购中失去了下午的工作。以下是我所做的: 在本地创建了一个新项目并做了一些工作 在github上创建了回购协议 git init git添加src git远程添加源git@github.com:Synesso/memx.git git拉入原点主控器 git add.gitignore git提交-m'updated ignore' git推送原始主机 我的本地回购协议和github回购协议都只有两次提交。初始提交(由github在项目创建时进行),第二次提交仅包括文件.gitig
git init
git添加src
git远程添加源git@github.com:Synesso/memx.git
git拉入原点主控器
git add.gitignore
git提交-m'updated ignore'
git推送原始主机
.gitignore
步骤4中添加的文件(git add src
)不存在。它们似乎也没有上演
在执行git拉取操作时,是否会丢失暂存文件?我能找到它们吗
当前状态:
$ git status
# On branch master
nothing to commit (working directory clean)
我的初始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
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
我知道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
jem@jem-usb:~/projects$mkdir x
jem@jem-usb:~/projects$cd x
jem@jem-usb:~/projects/x$git init
已在/home/jem/projects/x/.Git中初始化空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状态
#论分行行长
#
#初始提交
#
#要提交的更改:
#(使用“git rm--cached…”取消存储)
#
#新文件:hello.world
#
jem@jem-usb:~/projects/x$ls-asl
总数24
4 drwxrwxr-x 3 jem jem 4096年4月28日20:56。
4 drwxr-xr-x 8 jem jem 4096年4月28日20:56。。
4 drwxrwxr-x 7 jem jem 4096年4月28日20:56.吉特
12-rw-rw-r--1Jem-jem 3 Apr 28 20:56 hello.world
jem@jem-usb:~/projects/x$git远程添加源git@github.com:Synesso/memx.git
jem@jem-usb:~/projects/x$git reflog
致命:错误的默认版本“HEAD”
jem@jem-usb:~/projects/x$git拉取原始主机
远程:计数对象:7,完成。
远程:压缩对象:100%(5/5),完成。
远程:共7个(增量0),重复使用3个(增量0)
拆包对象:100%(7/7),完成。
来自github.com:Synesso/memx
*分支主控->取头
jem@jem-usb:~/projects/x$ls-asl
总数36
4 drwxrwxr-x 3 jem jem 4096年4月28日20:53。
4 drwxr-xr-x 8 jem jem 4096年4月28日20:52。。
4 drwxrwxr-x 8 jem jem 4096年4月28日20:53.吉特
12-rw-rw-r--1杰姆杰姆59四月28日20:53.吉特
12-rw-rw-r--1 jem jem 9 Apr 28 20:53 README.md
jem@jem-usb:~/projects/x$git reflog
c80135d磁头@{0}:初始拉力
文件
hello.world
在没有警告的情况下被删除。您在github上的回购不包含任何有价值的文件。难道你没有忘记把它们交出来吗
即使它们没有暂存,您的
src
文件夹在本地哪里?如果您只执行了问题中指定的操作,git无论如何都不能吃掉您的文件。我认为您应该在添加
之前,在远程添加
和拉取
我认为,这是一个不幸的副作用,即拥有一个不需要一次提交的新存储库。如果您再次尝试测试,但在本地执行:
git init; echo "Readme" > Readme; git add Readme; git commit -m 'Initial commit'
然后,当您“拉入”一个包含“src”文件的工作目录时,GIT将发出警告,更重要的是,它不会删除内容。我能够在不使用github的情况下,使用两台主机(此处重命名为hostB,这是“远程”主机,而hostA,这是“本地”)复制此内容: 果然,如果您检查blob(现在在
.git/lost-found/other
中恢复),这些blob将包含您丢失的东西。(任何目录结构都将消失,您必须找出哪个文件是哪个文件,然后将它们重新放在您想要的位置。)
有趣的是,如果
git-fetch-origin
后跟git-merge-origin/master
,它会获取origin的初始修订版(在本例中是来自hostB的.gitignore和README.md文件),并保留“要提交的更改”。支持git fetch
的另一个原因是git merge
?:-) 我收到了Junio Hamano在git邮件列表上的以下回复:
这是一个意料之外的极端情况,干扰了我们的努力 幸好事与愿违 很长一段时间,没有历史,要求拉是被禁止的, 因为“git拉动”是关于组合两个(或更多)历史的 当你没有历史的时候,一起并肩作战是胡说八道——只有你自己 有一段历史(另一边的历史)什么都没有 结合 后来我们试着变得更好,因为一些新用户在 在空目录中执行“git init”,后跟“git pull”,通过 将“合并”重新定义为无历史意味着重置为另一个 历史 这解决了“git init&&git pull”,但我们没有预料到任何人 将执行“git init&&git add&&git pull”序列,其中 除了出错,没有理智的结果 只有理智的结果才会出现这样的补丁
git-pull.sh | 3 +++
1 file changed, 3 insertions(+)
diff --git a/git-pull.sh b/git-pull.sh
index 2a10047..da102d0 100755
--- a/git-pull.sh
+++ b/git-pull.sh
@@ -261,6 +261,9 @@ esac
if test -z "$orig_head"
then
+ test $(git ls-files | wc -l) = 0 ||
+ die "$(gettext "Uncommitted changes in the index")"
+
git update-ref -m "initial pull" HEAD $merge_head "$curr_head" &&
git read-tree -m -u HEAD || exit 1
exit
git reflog
将显示树的修改。但是如果你从来没有提交过你的src
文件,git status
现在说了什么?我也是这么想的。但是src文件夹不再在本地存在。即。。。美丽的。谢谢。我非常感激——希望我能回答这个问题@Treffynnon:这在“官方”git中用commitb4dc085a8dc2ec2f修复
hostA$ git fsck --lost-found
Checking object directories: 100% (256/256), done.
dangling blob 45b983be36b73c0788dc9cbcb76cbb80fc7bb057
hostA$
git-pull.sh | 3 +++
1 file changed, 3 insertions(+)
diff --git a/git-pull.sh b/git-pull.sh
index 2a10047..da102d0 100755
--- a/git-pull.sh
+++ b/git-pull.sh
@@ -261,6 +261,9 @@ esac
if test -z "$orig_head"
then
+ test $(git ls-files | wc -l) = 0 ||
+ die "$(gettext "Uncommitted changes in the index")"
+
git update-ref -m "initial pull" HEAD $merge_head "$curr_head" &&
git read-tree -m -u HEAD || exit 1
exit