git init
git add readme.txt
git add file2.txt file3.txt //也可以同时提交多个文件
git commit -m "write a readme file"
git status
git diff readme.txt // 修改之后还没有暂存起来的变化内容(没Add之前使用)
git diff --cached // 查看已经add但是还没有commit的改动
git diff HEAD -- readme.txt // 查看工作版本和HEAD的差别
git diff 版本号1 版本号2 // 比较两个版本下文件的所有差异
1.从上到下依次显示最近到最远的提交日志
2.常用来获取commit id,便于版本回退
git log
在Git中:
HEAD
表示当前版本
HEAD^
表示上一个版本
HEAD^^
表示上上一个版本
HEAD~3
表示往上第三个版本
另外:
可以根据 commit id 确定想要回退的版本
git reflog
git reset --hard HEAD^
git reset --hard 3628164 // commit id 回退
git checkout -- readme.txt //就是让这个文件回到最近一次git commit或git add时的状态。
/* git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令 */
git reset HEAD readme.txt // 把暂存区的修改回退到工作区
在本地删除不需要的文件之后,因为工作区和版本库不一致了,执行git status
命令会立刻告诉你哪些文件被删除了:
$ git status
# On branch master
# Changes not staged for commit:
# (use "git add/rm ..." to update what will be committed)
# (use "git checkout -- ..." to discard changes in working directory)
#
# deleted: test.txt
#
no changes added to commit (use "git add" and/or "git commit -a")
这时候你有两个选择:
(1)确实要从版本库中删除该文件:
git rm test.txt
git commit -m "remove test.txt"
(2)删错了,从版本库中恢复:
git checkout -- test.txt
第1步:创建SSH Key。在用户主目录下,看看有没有.ssh
目录,如果有,再看看这个目录下有没有id_rsa
和id_rsa.pub
这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:
$ ssh-keygen -t rsa -C "[email protected]"
你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个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:
(1)首先,登陆GitHub,然后,在右上角找到“Create a new repo”按钮,创建一个新的仓库。
然后在Repository name
填入你的仓库名(与本地仓库名一致),其他保持默认设置,点击“Create repository”按钮,就成功地创建了一个新的Git仓库。
(2)目前仓库还是空的,GitHub告诉我们,可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。
$ git remote add origin git@github.com:Happy-zyy/UCAS-CDSelector.git
/*
Happy-zyy : Github账户名
UCAS-CDSelector :仓库名
添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。
下一步,就可以把本地库的所有内容推送到远程库上
$ git push -u origin master
把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
推送成功后,可以立刻在GitHub页面中看到远程库的内容已经和本地一模一样:
从现在起,只要本地作了提交,就可以通过命令:
$ git push origin master
把本地master分支的最新修改推送至GitHub,现在,你就拥有了真正的分布式版本库!
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.
这个警告只会出现一次,后面的操作就不会有任何警告了。
如果你实在担心有人冒充GitHub服务器,输入yes前可以对照GitHub的RSA Key的指纹信息是否与SSH连接给出的一致。
$ git clone git@github.com:Happy-zyy/RepoName.git
//RepoName : 远程仓库名
PS:
GitHub给出的地址不止一个,还可以用https://github.com/Happy-zyy/The_one这样的地址。实际上,Git支持多种协议,默认的git://使用ssh,但也可以使用https等其他协议。
HEAD
指向当前分支master
指向提交 一开始的时候master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点。每次提交,master分支都会向前移动一步,这样,随着你不断提交,master分支的线也越来越长。
git checkout -b dev // 创建dev分支,然后切换到dev分支
等价于
git branch dev //创建
git checkout dev //切换
$ git branch
* dev
master
git branch命令会列出所有分支,当前分支前面会标一个*号。
git merge dev // 我们把dev分支到当前分支(HEAD)
git branch -d dev //删除dev分支