1. 获取Git仓库
1.1 在现有目录中初始化仓库
a. 在该项目目录下输入 $git init 表明使用Git来对现有的项目进行管理,此时项目里的文件还没有被跟踪
b. 通过 $git add命令来实现对指定文件的跟踪 e.g: $git add *.c
c. 执行commit提交 e.g: $git commit -m 'initial project version',现在已经得到了一个实际维护着若干个文件的Git仓库
2.2 克隆现有的仓库
a. git clone [url]
在当前目录下创建一个joe文件夹,将远程的所有版本放置在.git文件夹中,然后从中读取最新版本的文件拷贝刚知道该目录下
e.g: $git clone https://github.com/joe/joe
在本地创建的仓库名字变为myJoe
e.g: $git clone https://github.com/joe/joe myJoe
2 git文件的状态周期变化
2.1 查看哪些文件处于什么状态$ git status
a. 提示是否有未跟踪文件,出现在Untracked file下面
b. 提示是否是暂存状态,出现在Changes to be committed下面
c. 提示已跟踪的文件内容是否发生了变化,但是还没有放到暂存区,出现在Changes not staged for commit下面
缩减命令 git status -s
??:新添加的未跟踪文件
A:新添加到暂存区中的文件
M:出现在右边表示该文件被修改了但是还没有放入暂存区,出现在左边表示该文件被修改了并放入了暂存区
MM:表示在工作区被修改并提交到暂存区之后又在工作区被修改了
2.2 $git add
1) 开始跟踪新文件(添加到暂存区)
2)把已跟踪的文件放到暂存区
3)合并时,把有冲突的文件标记为已解决状态等
3. 设置.git忽略文件
.gitignore格式规范:
1) 所有空行或者以#开头的行都会被Git忽略
2)可以使用标准的glob模式匹配(shell所使用的简化了的正则表达式)
3)匹配模式可以以(/)开头,防止递归
4)匹配模式可以以(/)结尾指定目录
5) 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反
4. 查看已暂存和未暂存的修改
4.1 使用$git diff
1)当前做的哪些更新还没有暂存(不加参数直接输入git diff)
此命令比较的是工作目录中当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化内容
2)有哪些更新已经暂存起来准备好了下次提交(git diff --staged/git diff --cached)
查看已暂存的将要添加到下次提交里的内容
5. 提交更新
5.1 正常提交
$git add
$git commit -v/-m
5.2 跳过缓存区提交
$git commit -a
6. 移除文件
6.1将文件从暂存区域移除,并连带从工作目录中删除指定的文件($git rm/$git rm -f ;$git commit)
6.2 将文件从暂存区域移除,但是仍然保留在磁盘($git rm --cached README)
6.3 批量删除文件($git rm [表达式])
7. 移动文件
git mv [oldFileName] [newFileName]
等价于如下3条指令:
mv oldFileName newFileName
git rm oldFileName
git add newFileName
8. 查看提交历史(以下图和文字列出的并不完全)
1) git log
2) git log -p / git log -p -数字
3) git log --start
4) git log --pretty=oneline/short/full/fuller
5) git log --pretty = format:"$string" [option]
9. 撤销操作
9.1 将暂存区中的文件提交,如果暂存区的数据并没有被修改,那么快照会保持不变,这样所修改的只是提交信息,文本编辑器启动之后,可以看到之前的提交信息,编辑后保存会覆盖原来的提交信息。
$git commit --amend
9.2 提交后发现忘记了暂存的某些修改,如下操作只会有一个提交,第二次提交将会代替第一次提交的结果
$git commi -m 'initial commit'
$git add forgotten_file
$git commit --amend
9.3 取消对修改的暂存
$git reset HEAD [fileName]
9.4 取消对文件内容的修改
$git checkout --[fileName]
10. 查看远程仓库
10.1 $git remote/$git remote -v:显示需要读写远程仓库使用的Git保存的简写与其对应的URL
10.2 $git remote show origin
11. 添加远程仓库
11.1 $git remote add <shortname> <url>:添加一个新的远程Git仓库,同时指定一个你可以轻松引用的简写
12. 从远程仓库中获得数据,拉取远程仓库中有但你没有的信息
12.1 $git fetch <远程仓库名>:访问远程仓库,从中拉取你还没有的数据,执行完成后你将会拥有那个远程仓库中所有分支的引用,可以随时合并或查看,git fetch命令会将数据拉取到逆的本地仓库,并不会自动合并或修改你当前的工作,当准备好时你必须手动将其合并入你的工作.
12.2 $git pull该命令会尝试自动合并
13. 推送到远程仓库
13.1 $git push origin master
只有当你有所克隆的服务器的写入权限,并且之前没有人推送过时,这条命令才能生效,当你和其他人在同一时间克隆,他们先推送到上游然后你再推送到上游,你的推送就会毫无疑问的被拒绝。你必须先将他们的工作拉取下来并将其合并进逆的工作后才能推送。
14. 远程仓库的移除与重命名
14.1 重命名:$git remote rename oldName newName
14.2 移除远程仓库:$git remote rm 远程仓库名
15. 给历史中的某一个提交打上标签
15.1 $git tag : 列出已有的标签
15.2 $git tag -l '标签部分关键字母':列出匹配的标签
15.3 $git show <tagName> : 查看标签信息与对应的提交信息
a. 轻量标签只会显示出提交信息,不会看到额外的标签信息
b. 附注标签可以看到标签信息与对应的提交信息
16. 标签类型
16.1 轻量标签(lightweight):一个特定提交的引用,本质是将提交校验和存储到一个文件中 $git tag <tagName>
16.2 附注标签(annotated):一个完整的对象 $git tag -a <tagName> -m <tagInformation>
17. 对过往的提交打标签
17.1 git tag -a <tagName> <SHA>
18. 共享标签(git push不会传送标签到远程仓库服务器上,在创建完标签后你必须显式地推送标签到共享服务器上)
18.1 推送一个标签 $git push origin [tagname]
18.2 推送所有不在远程仓库服务器上的标签全部传送过去 $git push origin --tags
19. 删除标签
19.1 删除本地仓库上的标签 git tag -d <tagname>(只是举了个轻量级标签的例子)
19.2 删除本地标签之后再从远程库中移除这个标签:git push <remoteName> :refs/tags/<tagName>
20. 检出标签
学完分支之后在回来补充。
21. Git别名
21.1 设置方法:通过git config文件来轻松地为每一个命令设置一个别名 e.g:git config --global alias.co chekout
22. 总结
通过上述方法 创建/克隆一个仓库,做更改,暂存并提交这些更改,浏览你的仓库从创建到现在的所有更改的历史。