我做了一件非常愚蠢的事.我使用git commit(文件编辑+新文件)(C)进行了提交.然后我修改了最后一次提交.然后我使用递归删除所有文件(!)git rm -r
然后我做了另一个git commit(C).
A-B-C
?
master
有没有办法取消删除文件,但保留我在第一次提交时所做的更改?(C)我宁愿不回到(B).我试过git reset --soft head ^,那么git status列出了我删除的文件,然后我做了git checkout,但仍然没有运气.我甚至不知道是否可能.
有很多有用的Git引用(究竟是什么确切的名字?),例如HEAD,ORIG_HEAD,FETCH_HEAD,MERGE_HEAD,@ {}上游等
有什么参考吗?一个包含解释的完整列表?
在我的实验中,我无法找到任何功能上的区别
git reset --hard
Run Code Online (Sandbox Code Playgroud)
和
git reset --merge
Run Code Online (Sandbox Code Playgroud)
使用说明也没有给出任何提示
--hard reset HEAD, index and working tree
--merge reset HEAD, index and working tree
Run Code Online (Sandbox Code Playgroud)
我经常使用该--hard选项,所以了解它是如何工作的.选项--merge和--hard选项之间有什么区别?
干杯,奥利
也许一个例子在这里会有所帮助,让我们使用以下顺序:
cd git_repo
touch file_one
git add file_one
git commit -m "commit one" # sha1 of 123abc
echo "one" >> ./file_one
git commit -a -m "commit two" # sha1 of 234bcd
echo "two" >> ./file_one
git add . # populate index with a change
echo "three" >> ./file_one # …Run Code Online (Sandbox Code Playgroud) at-sign @通常在git中用于以不同方式指定修订.例如,
<ref>@{<date>}指定其状态的引用<date>.
示例:git diff master@{yesterday} master.
<ref>@{<n>}特定于第n 个先前状态的参考.
示例:git diff master@{1} master.
@{-<n>}指定当前之前检出的第n 个分支.
示例:git checkout @{-5}.
<ref>@{upstream} 指定引用的上游分支.
示例:git diff master@{upstream} master.
但是,@它也在git命令中以其他方式使用,例如
git rebase -i @~4
git log @^^..@
Run Code Online (Sandbox Code Playgroud)
@在这些例子中,at-sign 意味着什么?
运行后git reset HEAD~1,我注意到实际上没有别的事可做了,提交也没问题.有没有办法恢复此命令?
* [971f835] (HEAD, original_idea) Now working here. Some comment 9
* [692b673] Some comment 8
* [3ebff62] Reverted to original idea. Some comment 7
| * [72ea01d] (master) Decided it wasn't worth the effort. Some comment 6
| * [985c1ad] Some comment 5
| * [4d7d491] Some comment 4
| * [0c697bb] Branched to try an idea. Some comment 3
|/
* [7280b1f] Some comment 2
* [5c2c6d0] Some comment 1
* [bc7aac6] Initial commit
Run Code Online (Sandbox Code Playgroud)
所以,master落后了.不确定是怎么回事.一旦我确定我完成了没有工作的分支,我检查[7280b1f]并继续从那里. …
完成功能分支后,git rebase -i我意外删除了所有提交.我不完全确定,但我怀疑不是压缩我的提交,而是用提交消息替换整个条目.
http://shafiulazam.com/gitbook/4_interactive_rebasing.html说:
交互式rebase可以做的最后一个有用的事情就是为你删除提交.如果不是为提交行选择"选择","压缩"或"编辑",只需删除该行,它将从历史记录中删除提交.
我的问题是:有没有办法恢复/撤消这个?
我正在使用git svn公司强制的svn服务器获得一些git goodness.我刚刚变得非常糟糕,我正试图找出最好的恢复方法.
这是发生的事情:
首先,我有这个
---1 (master)
\--B--C--D--E (feature/fix-widgets)
Run Code Online (Sandbox Code Playgroud)所以然后我做了git checkout master,然后git svn rebase在master上下拉这些提交.我没想到我的功能分支和主人之间有任何冲突,因为更改是在一个完全不同的文件夹中.所以在这一点上,我想我有这个:
---1--2--3--4 (master)
\--B--C--D--E (feature/fix-widgets)
Run Code Online (Sandbox Code Playgroud)
1--2--3--4从svn提交的提交在哪里.
接下来,我做的git checkout feature/fix-widgets,然后git rebase master.有一些冲突,有些事情没有加起来,所以我决定撇开并更仔细地看待事情.我这样做git rebase --abort,希望这能让我恢复到变形前的状态.
我这样做git rebase --abort并收到以下消息
$ git rebase --abort
error: git checkout-index: unable to create file somedir/somefile.cs (Permission denied)
fatal: Could not reset index file to revision 'be44daa05be39f6dd0d602486a598b63b6bd2af7'.
Run Code Online (Sandbox Code Playgroud)现在我不知道该怎么做.git status表明我已经开启了feature/fix-widgets,但是我有一大堆阶段性的更改,以及之前提交的大量未跟踪文件.如果我能回来,我会没事的E.
我正在使用msysgit(1.7.9),我正在寻找正确的git ls-files命令调用,以显示当前级别的(跟踪的)文件和目录,无论是从索引还是当前工作目录,如果这是更轻松.
基本上它会给出一个类似于你在Github上看到的目录列表.来自Windows,我不太熟悉正确的方法(?).
我希望停止跟踪文件,但仍然将它们保存在我的工作树中.
我已经聚集了,这git rm --cached FILE将让我这样做.但是,如果其他人撤消此更改,是否会删除其本地副本?