介绍
Git是目前世界上先进的分布式版本控制系统,在处理项目时十分高效。相比于SVN,SVN是集中式版本控制系统,版本库是集中放在中央服务器的,所以首先要从中央服务器得到最新的版本,维护好本地版本之后,需要把自己更新的版本推送到中央服务器。而且集中式版本控制系统是必须联网才能工作。Git是分布式版本控制系统,它没有中央服务器的,每个人的本地就是一个完整的版本库。Git 仓库中的提交记录保存的是你的目录下所有文件的快照,就像是把整个目录复制,然后再粘贴一样,但比复制粘贴优雅许多!Git 希望提交记录尽可能地轻量,因此在你每次进行提交时,它并不会盲目地复制整个目录。条件允许的情况下,它会将当前版本与仓库中的上一个版本进行对比,并把所有的差异打包到一起作为一个提交记录。Git 还保存了提交的历史记录。这也是为什么大多数提交记录的上面都有父节点的原因。对于项目组的成员来说,维护提交历史对大家都有好处。
安装
Git的安装包我们可以从Git 官网下载。Git 支持MacOS,Linux/Unix 和 Windows等操作环境。具体的大家可以依照各自需求来完成安装。
本地建库
- 创建一个目标路径
- 进入Git bash
- 在如下页面输入 git init
4.回复窗口中的信息表示你已经在本地建立了一个Git 库。但是你会发现,你无法看到 .git 的文件夹。这是因为系统将它隐藏起来了。如果你想看到这个文件夹,可以通过如下操作获取到。
远程建库
通常来说,我们建立远程库一般会是在Github上面,如果项目有自己的远程库,则可以忽略该部分。这里主要介绍如何在Github上面建立自己的远程库。
- 登录Github。如果没有账号,请先注册。
- 创建SSH key。如果在你用户的目录下有.ssh的话,可以直接使用,如果没有的话,请在Git bash 中输入 ssh-keygen - o 完成密钥的生成。
- 进入到Github账号的setting里面
- 选择 SSH and GPG keys 中的 New SSH keys
- 输入第二步中获取到的ssh key
- Github上新建一个工程来实现本地库与远程库的同步管理。
- 输入完信息之后,我们就可以创建了一个新的库。
- 回到本地的仓库,我们这个时候将本地库中的内容上传至我们Github中的库。输入命令 git remote add origin https://github.com/Forever-Youth/temp.git 或者 git push -u origin master,就可以完成本地库的上传。
Git 常用命令
- git clone Git repository URL from Github(http 连接)
下载现有的Git 库。
-
git init
在目录中创建新的 Git 仓库并初始化。初始化完成之后,可以生成一个 .git 的隐藏文件夹
-
git add [file1] [file2] …
将添加一个或多个文件到暂存区。添加之后不会有提示。
-
git add [dir]
添加指定目录到暂存区,包括子目录。
-
git add .
添加当前目录下的所有文件到暂存区
-
git status
用于查看项目的当前状态,显示有变更的文件。这里我将前面三个命令添加剂到暂存区。
-
git status -s
使用 -s 参数来获得简短的输出结果。M 状态的意思是这个文件在我们将它添加到缓存之后又有改动。
’ ’ (空格)表示文件未发生更改
M 表示文件发生改动。
A 表示新增文件。
D 表示删除文件。
R 表示重命名。
C 表示复制。
U 表示更新但未合并。
? 表示未跟踪文件。
! 表示忽略文件。
未跟踪和忽略文件会显示相同的两列,如 ?? -
git diff [file]
显示暂存区和工作区的差异。可以通过该命令查询得到本地与库之间的差异。
-
git diff --cached [file] / git diff --staged [file]
显示暂存区和上一次提交(commit)的差异 。在你没有提交上传至暂存区的时候,你无法通过命令(git diff --cached filename) 来获取库与本地的差异。
-
git commit
将暂存区内容添加到本地仓库中。在整个过程中,git会请求你为本次提交进行一个备注。如果使用git 自身携带的编译器,十分的不方便,这边推荐将打开方式配置成notepad++ 。下载连接已附上。
-
git commit -m [message]
[message] 可以是一些备注信息
-
git commit [file1] [file2] … -m [message]
提交暂存区的指定文件到仓库区
-
git commit -a
-a 参数设置修改文件后不需要执行 git add 命令,直接来提交 -
git reset [–soft | --mixed | --hard] [HEAD]
--mixed 为默认,可以不用带该参数,
--soft 参数用于回退到某个版本
--hard 参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交
用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变
这里对HEAD参数进行一个说明:
HEAD / HEAD~0 表示当前版本
HEAD^ / HEAD~1 上一个版本
HEAD^^ / HEAD~2上上一个版本
HEAD^^^ / HEAD~3 上上上一个版本
…
这里可以通过跟下方git log读取到的信息作比较,本地库中的版本已经回推到 “add a new file” 阶段。 -
git reset HEAD
用于取消已缓存的内容;取消之前 git add 添加,但不希望包含在下一提交快照中的缓存 -
git rm
将文件从暂存区和工作区中删除。如果没有相关的内容,git 会有提示。
-
git rm -f
强行从暂存区和工作区中删除修改后的文件 -
git rm --cached
把文件从暂存区域移除,但仍然希望保留在当前工作目录中 -
git rm –r *
递归删除整个目录中的所有子目录和文件 -
git mv [file] [newfile]
用于移动或重命名一个文件、目录或软连接 -
git mv -f [file] [newfile]
新文件名已经存在,但还是要重命名它,可以使用 -f 参数 -
git log
查看历史提交记录
-
Q
退出 git log的查询状态
-
git blame [file]
以列表形式查看指定文件的历史修改记录
-
git remote -v
显示所有远程仓库 -
git remote show [remote]
显示某个远程仓库的信息 -
git remote add [shortname] [url]
添加远程版本库,shortname 为本地的版本库 -
git remote rm name
删除远程仓库 -
git remote rename old_name new_name
修改仓库名 -
git fetch
用于从远程获取代码库 -
git merge
从远端仓库提取数据并尝试合并到当前分支 -
git pull <远程主机名> <远程分支名>:<本地分支名>
将远程主机 origin 的 master 分支拉取过来,与本地的 brantest 分支合并 -
git push <远程主机名> <本地分支名>:<远程分支名>
将本地的分支版本上传到远程并合并 -
git ls-files
查询本地仓库中的文件
-
git branch
查询分支情况
-
git branch [branch name]
新建一个分支
-
git checkout [branch name]
在各个分支之间切换(标绿的表示当前分支,也可以从蓝色字体看到)
后续如有更新和更正,也会同步到此。