一、Git和GitHub的设置
官网下载git,git的环境变量会随着下载安装自动添加
1.设置用户名和邮件地址
git config --global user.name "这里换上你的用户名"
git config --global user.email "这里换上你的邮箱"
查看当前用户名和邮箱:
git config --global --list
- 在此处设置用户名和邮件地址时,如果使用了
--global
选项,那么该命令只需要运行一次,因为之后无论你在该系统上做任何事情, Git 都会使用那些信息。 - 想针对特定项目使用不同的用户名称与邮件地址,可以在那个项目目录下运行没有
--global
选项的命令来配置。
2.与GitHub设置ssh配对
首先,需要生成ssh公钥。键入
ssh-keygen -t rsa -C "这里换上你的邮箱"
然后,就会出现等待你的三次输入,内容分别是:
- 确认秘钥的保存路径(如果不需要改路径则直接回车);
- 如果上一步置顶的保存路径下已经有秘钥文件,则需要确认是否覆盖(如果之前的秘钥不再需要则直接回车覆盖,如需要则手动拷贝到其他目录后再覆盖);
- 创建密码(如果不需要密码则直接回车)
最后,在上述指定的保存路径下(默认C:\Users\Administrator.ssh)会生成名为id_rsa
和id_rsa.pub
的文件。将生成的id_rsa.pub
文件中的内容拷贝到GitHub中的key(其名称通常是用来区分不同主机),然后保存。
C:\Users\Administrator.ssh该路径下的.ssh文件夹如果存在,可以直接删除,按上述重新生成ssh文件夹
注意:秘钥对:
id_rsa
是私钥,不能泄露出去,id_rsa.pub
是公钥,可以放心地告诉任何人。
查看当前本地与GitHub的连接情况:
ssh -T git@github.com
二、本地库操作
1.创建版本库
1.创建空目录(这里目录名为learngit)
$ mkdir learngit
2.进入目录
$ cd learngit
3.显示当前目录
$ pwd
4.将当前目录变为Git可以管理的仓库
$ git init
.git
目录是Git来跟踪管理版本库的,要放到Git仓库的文件要放在该目录或者其子目录下
2.把文件添加到版本库
1.在分支中新建文件(这里文件为readme.txt)
$ touch readme.txt
2.vim编辑文件
$ vi readme.txt
按 “i” 进入编辑,按 “esc” “:wq”保存并推出
3.把文件添加到仓库
$ git add readme.txt
4.把文件提交到仓库
$ git commit -m "wrote a readme file"
commit
可以一次提交很多文件,所以你可以多次add
不同的文件
Git告诉我们当前没有需要提交的修改(nothing to commit
),而且,工作目录是干净(working tree clean)的。
3.修改文件、查看修改
1.查看仓库当前的状态(如:是否修改了文件、修改是否已提交、删除了什么文件、冲突的文件等)
$ git status
2.查看具体修改了什么内容
$ git diff readme.txt
4.版本回退
每当你觉得文件修改到一定程度的时候,就可以“保存一个快照”,这个快照在Git中被称为commit
。一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit
恢复,然后继续工作,而不是把几个月的工作成果全部丢失。
1.查看提交日志的历史记录
$ git log
简略版
$ git log --pretty=oneline
一大串类似1094adb...
的是commit id
(版本号)
在Git中,用HEAD
表示当前版本,最新的提交上一个版本是HEAD^``,
上上一个版本就是HEAD^^
2.回退到上一个版本
$ git reset --hard HEAD^
3.指定回到未来的某个版本
(1)只要上面的命令行窗口还没有被关掉,你就可以顺着往上找,找到那个未来版本的commit id,这里
是1094adb...
$ git reset --hard 1094a
(2)已经关闭了命令行,想恢复到新版本
- 查看命令日志的历史记录(为了找commit id)
$ git reflog
- 找到待恢复版本的commit id,用$ git reset –hard 1094a回到新版本
5.撤销修改
1.丢弃工作区的修改
$ git checkout -- readme.txt
自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态
git checkout -- file
命令中的--
很重要,没有--
,就变成了“切换到另一个分支”的命令
2.修改后已经git add
到暂存区,但是还没有提交
$ git reset HEAD readme.txt
git reset
命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD
时,表示最新的版本。
接下来通过命令$ git checkout -- readme.txt
丢弃工作区的修改
3.已经提交到版本库(前提是没有推送到远程库)
想要撤销本次提交,参考四.版本回退
6.删除文件
1.从工作空间删除文件(和直接在文件管理器删除相同)
$ rm test.txt
2.从版本库删除文件
如果该文件已经提交到了版本库,从工作空间删除文件后,那么此时工作区和版本库就不一致了
$ git rm test.txt
然后
$ git commit -m "remove test.txt"
文件就从版本库中被删除了
3.从版本库恢复工作空间误删的文件
$ git checkout -- test.txt
git checkout
其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
注意:从来没有被添加到版本库就被删除的文件,是无法恢复的!
7.分支操作
1.查看分支
$ git branch
2.创建分支(这里分支名为dev)
$ git branch dev
3.切换分支
$ git checkout dev
或者
$ git switch dev
注意:在切换分支时,分支上的文件要及时的add和commit,否则只是保存在工作空间,每个分支都会有共同的文件
4.创建+切换分支
$ git branch -d dev
或者
$ git switch -c dev
5.合并某分支到当前分支
$ git merge dev
6.删除分支
$ git branch -d dev
7.查看分支合并图
查看分支的合并情况,包括分支合并图、一行显示、提交校验码缩略显示
$ git log --graph --pretty=oneline --abbrev-commit
8.禁用fast forward的合并
$ git merge --no-ff -m "merge with no-ff" dev
因为本次合并要创建一个新的commit,所以加上-m
参数,把commit描述写进去。
通常,合并分支时,如果可能,Git会用Fast forward
模式,但这种模式下,删除分支后,会丢掉分支信息。加上--no-ff
参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward
合并就看不出来曾经做过合并。
三、远程库操作
1.本地仓库与远程库相关联
在本地的learngit
仓库下运行命令
$ git remote add origin GitHub仓库地址
添加后,远程库的名字就是origin
,这是Git默认的叫法,也可以改成别的,但是origin
这个名字一看就知道是远程库
2.本地仓库分支推送到远程库
$ git push -u origin master
把本地库的内容推送到远程,用git push
命令,实际上是把当前分支master
推送到远程。
由于远程库是空的,我们第一次推送master
分支时,加上了-u
参数,Git不但会把本地的master
分支内容推送的远程新的master
分支,还会把本地的master
分支和远程的master
分支关联起来,在以后的推送或者拉取时就可以简化命令。以后只要本地作了提交,就可以把本地master
分支的最新修改推送至GitHub
$ git push origin master
3.克隆仓库
$ git clone github仓库地址
4.本地创建远程库分支并推送(这里本地库名为dev)
- 待创建分支名称与本地相同
$ git push origin dev
此时GitHub仓库里也会创建一个名为dev的分支,内容和本地库相同
- 待创建分支名称与本地不同(这里远程库名为dev1)
$ git push origin dev:dev1
5.在本地创建和远程分支对应的分支(这里远程库名为dev)
$ git checkout -b dev origin/dev
6.本地删除远程库分支(这里远程库分支为dev)
$ git push origin :dev
7.查看远程库的信息
$ git remote
更详细的信息
$ git remote -v
8.指定本地dev
分支与远程origin/dev
分支的链接
$ git branch --set-upstream-to=origin/dev dev
参考资料:廖雪峰老师博客