2010-08-26

Removing Deleted Files from your Git Working Directory

我们知道git rm file 命令是删除一个文件,文件就进入了暂存区,之后就可以用git commit 来提交删除。但有时候我们从资源管理器中删除了某个文件,再用git st查看状态,git显示文件被删除,但是不在暂存区,这时,用git add .是无法将文件加入暂存区的,因为 git add .只会把当前目录里那些已更改,或者没有被忽略的新文件加入暂存区,对已删除的文件不起作用。那怎么办呢?答案是用 git add -u。它的作用是把工作区内已跟踪文件里更改或的,或者删除了的文件加入暂存区,但对新文件不起作用,它针对的是已跟踪文件。
git add -A = git add -u + git add .
注意A是大写的


Difference of “git add -A” and “git add .”

Removing Deleted Files from your Git Working Directory

2010-08-24

git 笔记

git 的强大就不用说了,目前在windows下使用git,先装 msysgit,再装tortoisegit
msysgit带git命令行 git bash
git init 初始化版本库
git add filename 添加新文件到版本库或者添加修改的文件到提交列表(暂存区)
git add . 同上,所有文件
git commit 提交,回车后会弹出默认文本编辑器以输入 commit message
git commit -a = git add + git commit
git commit -m "fix issue 15252" 直接提供commit message
git diff 比较当前工作目录和暂存区
git diff --cached 比较暂存区和上次提交
git diff HEAD 比较当前工作目录和上次提交

将 Current working directory 记为 (1)
将 Index file 记为 (2)
将 Git repository 记为 (3)
他们之间的提交层次关系是 (1) -> (2) -> (3)
git add完成的是(1) -> (2)
git commit完成的是(2) -> (3)
git commit -a两者的直接结合
从时间上看,可以认为(1)是最新的代码,(2)比较旧,(3)更旧
按时间排序就是 (1) <- (2) <- (3)
git diff得到的是从(2)到(1)的变化
git diff –cached得到的是从(3)到(2)的变化
git diff HEAD得到的是从(3)到(1)的变化
                                                                                                        --Lee.MaRS

git checkout -- filename 丢弃某个文件的更改(如果文件在暂存区,则丢弃添加到暂存区之后的更改,如果不在暂存区,则丢弃上次提交之后的更改)
git reset --hard 丢弃所有更改
git reset -- filename 从待提交列表中移除
git revert HEAD revert上一次的提交,并提交本次操作。
git rm filename 从磁盘删除文件,并添加到暂存区
git rm -r folder 从磁盘删除文件夹(内所有文件),并添加到暂存区,,对于文件, 也可以加上 -r
git rm --cached filename 保留文件,取消对文件的跟踪
git commit --amend 修正上一次提交。比如提交之后发现某个单词写错了,就可以用此命令来  修改上次的 commit message。或者提交后才发现没有把某个修改后的文件add 到暂存区,隐藏没有提交,这是就可以先git add xxx.txt 把文件添加到暂存区,然后运行此命令,把此文件加到上次提交中