- Git安装(略)及全局配置
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:
$ git config --global user.name "Your Name"
$ git config --global user.email "email@wxample.com"
- 创建版本库及简单操作
1. 选择位置,创建空目录,pwd显示当前目录
$ mkdir GitWork
$ cd GitWork
$ pwd
/d/GitWork/GitWork
2. 通过git init命令把这个目录变成Git可以管理的仓库
$ git init
Initialized empty Git repository in D:/GitWork/GitWork/.git/
3. 如果你没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看见。
4. 把文件添加到版本库,编写readme.txt文件写入如下内容,将文件放到GitWork目录下。
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.
5. 用命令git add告诉Git,把文件添加到仓库,用命令git commit告诉Git,把文件提交到仓库,-m后面输入的是本次提交的说明。
$ git add readme.txt
$ git commit -m "wrote a readme file"
[master (root-commit) f94b02a] wrote a readme file
1 file changed, 4 insertions(+)
create mode 100644 readme.txt
6. 将文件readme.txt文件内容修改如下:
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git A tracks changes of files.
7. git status命令看看结果,它将告诉我们readme.txt被修改过了,但还没准备提交的修改。
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: readme.txt
no changes added to commit (use "git add" and/or "git commit -a")
8. 使用指令git diff查看readme.txt被修改的的内容。
$ git diff readme.txt
diff --git a/readme.txt b/readme.txt
index 9a8b341..8d5a901 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,4 +1,4 @@
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
-Git tracks changes of files.
\ No newline at end of file
+Git A tracks changes of files.
\ No newline at end of file
9. 将修改后的readme.txt提交到版本库。
$ git add readme.txt
$ git commit -m "add A"
[master 03545ad] add A
1 file changed, 1 insertion(+), 1 deletion(-)
10. 查看状态
$ git status
On branch master
nothing to commit, working tree clean
11. 版本回退
$ git log 查看版本记录(如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数)
$ git reset --hard HEAD^ 退回上个版本,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
$ git reset --hard 1094a 退回对应ID的版本
$ git reflog 命令git reflog用来记录你的每一次命令,用于回到退回版本之前的版本
- 常用指令
$ git ls-files -d | xargs -i git checkout {} //同时恢复多个被删除的文件
$ git rm * -r //记得,cd 到你要删除的目录下。当然 * 可以换成指定目录
$ git init // 初始化一个Git仓库
$ git status // 查看仓库的状态
$ git add . // 将所有修改添加到暂存区
$ git add * // Ant风格添加修改
$ git add *Controller // 将以Controller结尾的文件的所有修改添加到暂存区
$ git add Hello* // 将所有以Hello开头的文件的修改添加到暂存区 例如:HelloWorld.txt,Hello.java,HelloGit.txt ...
$ git add Hello? // 将以Hello开头后面只有一位的文件的修改提交到暂存区 例如:Hello1.txt,HelloA.java 如果是HelloGit.txt或者Hello.java是不会被添加的
可以多次添加然后在提交
$ git commit -m "comment" // 将暂存区的修改提交到仓库 后面添加上有意义的注视信息
$ git diff file // 在file被修改了还未提交的时候查看修改的部分(和版本库中最新版本的不同 diff == difference 不同)
$ git log // 查看git的commit信息,每次提交的信息包括注视在内,从最新提交到最久提交
$ git log --pretty=oneline // 将commit 信息简化成一行显示
注意Git的版本号(commit id)是SHA1值ea34578d5496d7dd233c827ed32a8cd576c5ee85
$ git reset --hard HEAD^ // 退回到相对于当前版本的上一个版本 HEAD 表示当前版本
$ git reset --hard HEAD^^ // 退回到相对于当前版本的上上一个版本 HEAD 代表当前版本
$ git reset --hard HEAD~100 //退回到相对于当前版本的上 100 个版本去 HEAD 表示当前版本
$ git reset --hard 3628164 // 退回到指定的版本 这里不需要全部写commit id Git 回去自动适配
Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向append GPL
$ git reflog // 在退回到旧版本之后可以查看旧版本之前的提交日志
当我们想从一个旧版本退回到新版本但是我们关闭了shell窗口,不能查看之前的commit id了,就可以通过
$ git reflog 查看到之前的版本的commit id
$ git rm file // 从git版本库中删除文件
$ git commit -m "delete file" // 提交删除
$ git checkout file // 想要从git恢复 会出现:error: pathspec 'README.txt' did not match any file(s) known to git.
$ git reset --hard HEAD^ // 恢复到上一个版本 可以恢复文件
$ ssh-keygen -t rsa -C "youremail@example.com" // 创建SSH Key
$ git config --global user.name "zhangsan"
$ git config --global user.email "zhangsan@139.com"
$ git remote add origin git@github.com:zhangsan/ylez.git // 添加一个远程仓库
// add origin 就是添加一个远程仓库
// git@github.com:zhangsan/ylez.git 是远程仓库的地址
// git@github.com 主机的地址 我们可以通过GitLab大家自己的git服务器
// zhangsan 是你的用户名
// /ylez.git 是你的仓库名
$ git push -u origin master // 将本地的master分支推送到远程的master分支中
$ git push -u origin dev // 本地切换到dev分支然后将本地的dev分支推送到远程
$ git clone git@192.168.0.8:zhangsan/test.git // 讲一个远程的仓库克隆到本地
$ git branch // 查看git的所有分支
$ git branch dev // 创建dev分支
$ git checkout dev // 切换到一个已经存在的分支
$ git checkout -b dev // 创建dev分支,并切换到dev分支
$ git branch -d dev // 删除dev分支
$ git checkout master // 切换到主分支
$ git merge dev // 将dev分支合并到master分支
标签一般打在master分支上
$ git tag v1.0 // 在当前版本HEAD上打一个名称为v1.0 的标签
$ git tag // 查看所有标签,会列表出所有的标签名
$ git tag v0.8 59bc1cb // 为commit id 为59bc1cb...的commit打上v0.8 标签
还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字:
$ git tag -a v0.1 -m "version 0.1 released" 3628164 // 为commit id为3628164...的commit打上v0.1 的标签注视内容是version 0.1 released
$ git tag v0.1 //可以查看标签的信息包括文字说明
还可以通过-s用私钥签名一个标签:
$ git tag -s v0.2 -m "signed version 0.2 released" fec145a
用命令git show <tagname>可以看到PGP签名信息:
$ git show v0.2
$ git tag -d v0.1 // 删除标签 v0.1
$ git push -u origin v1.0 // 将标签v1.0 推送到远程仓库
$ git push -u origin --tags // 一次性推送全部标签
如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:
$ git tag -d v0.9
Deleted tag 'v0.9' (was 6224937)
然后,从远程删除。删除命令也是push,但是格式如下:
$ git push origin :refs/tags/v0.9
- 工作区和暂存区
工作区(Working Directory):
就是我们通$ git init 创建的代码库的所有文件但是不包括 .git文件(版本库)
暂存区(Repository):
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
我们通过$ git add ./*/*Xxx/Xxxx* 添加的修改,都是进入到暂存区了,肉眼不可见 用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。
你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
- 远程版本库
由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置:
第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:
$ ssh-keygen -t rsa -C "youremail@example.com"
你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。
如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面,然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容,点“Add Key”,你就应该看到已经添加的Key。
添加远程库相关指令:(使用clone克隆远程库)
$ git remote add origin git@github.com:username(你的用户名)/GitWork.git
$ git push -u origin master
SSH警告:
当你第一次使用Git的clone或者push命令连接GitHub时,会得到一个警告:
The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established.
RSA key fingerprint is xx.xx.xx.xx.xx.
Are you sure you want to continue connecting (yes/no)?
这是因为Git使用SSH连接,而SSH连接在第一次验证GitHub服务器的Key时,需要你确认GitHub的Key的指纹信息是否真的来自GitHub的服务器,输入yes回车即可。
Git会输出一个警告,告诉你已经把GitHub的Key添加到本机的一个信任列表里了:
Warning: Permanently added 'github.com' (RSA) to the list of known hosts.
这个警告只会出现一次,后面的操作就不会有任何警告了。
学习参考资料:
https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
https://blog.csdn.net/u012556150/article/details/50736896