1.git clone 是吧git仓库复制一份出来,把该项目的历史的所有数据都收取,服务器上的数据clone到本地。如果someday 服务器坏了,用任何一个克隆出来的客户断的数据都可以重新建立服务器上的仓库(repository)
2.四种状态 untracked unmodified modified staged
3.一个新文件(untracked)--> git add --> staged 状态。
4.在Changes to be commited 这行下面的,就说明是已暂存状态staged
5.git add 命令是个多功能命令,根据目标文件的状态不同,效果不同:
a.开始track 一个新文件 b.把已经tracked的文件放到staged区域 c.合并是把有冲突的文件标记为已解决状态。6.文件a,已经用git add加到staged,但此时修改下a,那么只是修改的本地当前版本,而非staged区域的版本;如果此时git commit,则提交的是staged里面没有修改的版本;如果此时git status,会发现stage区域里面有记录a(Changes to be committed)同时当前修改区域里面(Changed but not updated)里面也会出现a被修改的记录;需要再次git add才会把对a的修改覆盖到staged区域。
总结:staged和当前版本是两个版本,修改当前版本不会影响staged;需要再次add 才能覆盖staged。7.查看 当前修改和staged的不同直接用 git diff
查看 staged 和之前commit的不同用 git diff --staged8. 每一次commit都是对项目进行一次快照,之后可以回到这个快照或者和这个快照进行比较。
9.一般步骤: git add;git commit
跳过git add步骤:git commit -a 会自动把所有已经跟踪过的文件staged,然后在一并提交,跳过git add;不过实验发现对新添加没有track的文件,还是要先 git add 使之变成tracked,然后才能用。10. a. git rm 删除工作目录中的文件,并且以后不会跟踪此文件。
b. 如果单纯手工删除工作目录中的文件,git status会出现在Changed but not updated。再次运行git rm 可以消除这个。 c. git rm -f 连同暂存区的内容也删除。 d. git rm --cached 只删除暂存区的内容,当前目录的还要保留。如何恢复呢?
(1) 回退所有内容到上一个版本 git reset HEAD^ (2) 回退a.py这个文件的版本到上一个版本 git reset HEAD^ a.py (3) 向前回退到第3个版本 git reset –soft HEAD~3 (4) 将本地的状态回退到和远程的一样 git reset –hard origin/master (5) 回退到某个版本 git reset 057d (7) 回退到上一次提交的状态,按照某一次的commit完全反向的进行一次commit git revert HEAD git checkout a6d05a68d9f0e48bed697e05e55e3b20d5fa2f2a test.c 恢复某文件到指定版本 git checkout ${commit} /path/to/file 11.git log -p(显示每次提交的内容差异) -2(仅显示最近两次更新) git log --stat 统计 增加减少的行数 git log --pretty=oneline 每条在一行显示,方便在很多内容查找 12.git commit --amend 修改commit信息或者重新提交 用法:1.提交完事之后发现提交信息不对,那直接用git commit --amend 会跳出文本编辑器,修改保存退出后,就覆盖了之前的提交。 2.提交完事之后发现忘记提交某些文件,那先git add forgotten_files 然后运行git commit --amend 13.git reset HEAD <file>撤销staged 恢复到unstaged状态,但是修改还是保留。 如果不保留修改可以git checkout commitid file git将单个文件恢复到历史版本的正确方法如下: git reset commit_id 文件路径 git checkout -- 文件路径 14. 远程原始仓库用git remote 来看,一般是origin。git remote -v 查看显示clone的地址。 15. 设置命令别名: git config --global alias.unstage 'reset HEAD --' 把reset HEAD -- 替换成别名unstage,这样直接可以用git unstage 这条命令了。