每次播放文件时,Git都会在您需要取消暂存文件时提供有用的说明:
(use "git reset HEAD <file>..." to unstage)
然而,Atlassian的优秀Git教程简单地说:
git reset <file>
这似乎更直截了当,为什么差异呢?
当存储一些更改时,Git会创建两个单独的提交,"分支上的WIP"和"分支上的索引":
$ git log --graph --all
* commit 98aac13303ca086580c1ec9ccba5fe26c2a8ef3c
|\ Merge: 7d99786 82c5c76
| | Author: Tieme <my@email.com>
| | Date: Wed Nov 19 09:58:35 2014 +0100
| |
| | WIP on development: 7d99786 Last real commit
| |
| * commit 82c5c763357c401135675a39bfabf9b7f6805815
|/ Author: Tieme <my@email.com>
| Date: Wed Nov 19 09:58:35 2014 +0100
|
| index on development: 7d99786 Last real commit
|
|
| * commit 7d9978637a0e1ef92f2432189bdebf2317f0b2f0
| Author: Tieme <my@email.com>
| Date: Tue Nov 18 …Run Code Online (Sandbox Code Playgroud) 我们可以看到存储库和工作目录之间的区别:
git diff
Run Code Online (Sandbox Code Playgroud)
我们可以看到存储库和登台索引之间的区别:
git diff --staged
Run Code Online (Sandbox Code Playgroud)
但是我们如何看待工作目录和登台索引之间的区别?
我基本上知道 a 之间的区别git add,意思是“我想将此文件添加到我的下一个快照”和git commit“拍摄快照”。
但是,当我运行git add file1然后file1从我的工作目录中删除然后运行时,git commit它仍然可以工作。不知何故,快照是在添加时而不是在提交时拍摄的。我对吗?
我有以下Git信息,我想忽略我的IDE(Eclipse)的设置.
modified: myproject/.classpath
modified: myproject/.project
modified: myproject/.settings/com.google.gdt.eclipse.core.prefs
modified: myproject/.settings/org.eclipse.core.resources.prefs
modified: myproject/.settings/org.eclipse.jdt.core.prefs
modified: myproject/.settings/org.eclipse.wst.common.component
modified: myproject/.settings/org.eclipse.wst.common.project.facet.core.xml
modified: myproject/.settings/org.eclipse.wst.validation.prefs
Run Code Online (Sandbox Code Playgroud)
我在我的.gitignore文件中尝试了以下语句,但它不适用于这些设置:
.project
.classpath
.settings
*.project
*.classpath
*.settings
/.project
/.classpath
/.settings
.project/
.classpath/
.settings/
*.project/
*.classpath/
*.settings/
Run Code Online (Sandbox Code Playgroud)
我使用的是Mac OS X,我还使用这些设置添加了全局gitignore文件git config --global core.excludesfile '~/.gitignore',但是当我查看时,我仍然会收到上面的Git更新消息git status.我错了什么?
我正在学习 git/github/version control,我发现下面的图表非常有用(来源)。我的问题是哪里git merge适合这个图表?箭头会从哪里开始并指向哪里?
这不是关于' - '的一般问题,如标记的副本.这是一个特定于git的问题,要求明确所提到的命令之间的操作差异.
如果我想清除当前目录而不进行存储或提交,我通常会使用以下命令:
git reset HEAD --hard
git clean -fd
Run Code Online (Sandbox Code Playgroud)
一位同事还提到使用这个命令:
git checkout -- .
Run Code Online (Sandbox Code Playgroud)
对谷歌来说这是一个困难的命令,而且从git文档中我不清楚这个命令实际上做了什么.它似乎是手册中后面提到的用法之一.
猜测它会复制git reset HEAD --hard,但与我已经使用的命令相比,它究竟做了什么呢?
它是复制一个还是两个命令,还是相似但略有不同?
给定一个 Git 存储库和一个提交的文件a。
我使用 O/S 命令删除文件: $ rm a
调用git status返回:
On branch master
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)
deleted: a
no changes added to commit (use "git add" and/or "git commit -a")
Run Code Online (Sandbox Code Playgroud)
接下来,我调用git rm其次是git status哪个产生:
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
deleted: …Run Code Online (Sandbox Code Playgroud)