Git
1.安装
- 下载安装包,安装,默认安装了
Git GUI Here
和Git Bash Here
。 - 需要在哪里使用 git,只需在文件夹空白处右键,选择
Git Bash Here
即可打开 git 命令行。( git 内也可以使用 cd 命令选择文件夹)
2.配置
- 添加全局信息
$ git config --global user.email "user_email@example.com"
$ git config --global user.name "user_name"
// 必须设置邮箱和名字,否则无法 commit
3.Git命令
- 初始化命令
$ git init // 在现有项目中初始化 git
- 查看状态
$ git status // 查看当前文件状态
$ git status -s(或short) // 状态简览
状态:
- nothing to commit, working director clean => 工作区无文件,包括已跟踪和未跟踪
- Untracked files =>未跟踪的文件,可以使用 add 跟踪文件
- changes to be commited => 已暂存的修改,此时可以提交,且该版本的文件将会保存在log历史记录中
- changes not staged for commit => 已跟踪的文件修改后未处于暂存区,须再次使用 add 命令使其进入暂存区
- 跟踪文件
$ git add . // 跟踪所有文件,跟踪的文件将会进入暂存区;
$ git add hello.txt // 跟踪单个文件
$ git add *.js // 跟踪所有 .js 后缀的文件
- 提交命令
$ git commit // 提交修改,并在log中有记录
// 执行此命令会打开一个编辑器,编辑器中按下 Esc 后输入两个大写的 Z 退出编辑
$ git commit -m "commit_word" // 快捷提交,引号内是提交说明
$ git commit -a -m "commit_word" // 将跟踪的文件暂存,并快捷提交
- 推送命令
$ git push remote-name branch-name // 推送至远程仓库的指定分支
$ git push // 默认推送至 origin 仓库的 master 分支
// 若推送前项目的版本与clone的时候有差别(在你clone之后,push之前有其他人已经push),要先pull拉取更改,合并操作后再push(若有冲突还要解决冲突等操作)
- 拉取命令
$ git push remote-name branch-name // 从远程仓库的指定分支拉取
$ git push // 默认拉取 origin 仓库的 master 分支的内容
- 查看提交历史
$ git log // 查看所有提交历史
$ git log -p -2 // 显示每次提交的差异,并且只显示最后两次的提交
$ git log stat // 显示每次提交的简略信息
// 提示:大写的 Q 推出 log 命令
// 提示:可以为提交模式设置别名 alias
- 仓库管理
$ git remote // 列出所有指定的远程仓库简写
$ git remote -v // 显示远程仓库的简写及其 URL
$ git remote add <short-name> <url> // 添加远程仓库,并指定别名
$ git fetch <short-name> // 拉取远程仓库中你没有的信息;该命令会拉取至本地仓库,需手动合并
$ git remote show <remote-name> // 列出远程仓库的 URL 与跟踪分支的信息
$ git remote rename <old-name> <new-name> // 更改远程仓库名字
$ git remote rm <remote-name> // 删除指定的远程仓库
- 分支管理
$ git branch // 查看分支
$ git checkout <branch-name> // 切换至指定分支
$ git checkout -b <branch-name> // 创建并切换至分支
$ git branch <branch-name> // 创建分支,但要手动切换
$ git branch -d <branch-name> // 删除分支
GitHub
1.生成并配置SSH密钥:
// 1.生成密钥
$ ssh-keygen
// 2.生成密钥成功后,在C盘找到id_rsa.pub文件,打开拷贝里面的内容
// 3.打开GitHub的 Profile --> SSH and GPG keys --> New SSH key --> 粘贴密钥(title可以忽略) --> Add SSH key
2.创建第一个 GitHub 仓库
申请密钥之后,就可以关联 GitHub
上的个人仓库了,而且现在 GitHub
已经免费提供私人仓库了。
1)打开 GitHub 主页,点击 New,创建仓库
这里我没有勾选创建 README 文件,第一次关联仓库会简单点。
2)创建完成
由于没有创建 README 文件,当前的仓库是完全空的。下面也提示了可以进行的操作:
创建一个本地仓库,然后关联推送到远程仓库
将已有本地仓库,关联推送到远程仓库
-
其他
而本地仓库就是用
git init
在本地创建的仓库,远程仓库就是刚刚在 GitHub 创建的hello-world
仓库。不管怎样,本地仓库都是要 关联远程仓库 之后,才能 推送 到远程仓库的,就是箭头所指的两步。
3)本地仓库的创建
- 创建一个文件夹,打开文件夹,在空白处右键,选择
Git Bash Here
打开 Git 命令行,初始化 Git 仓库:
- 接着在文件夹内创建文件
hello.txt
,随便写点内容,不写也可以,然后添加文件到暂存区:
- 提交修改,输入提交说明:
- 添加远程仓库
- 推送至远程仓库
- 至此,GitHub 仓库已经存储了本地仓库推送的内容,打开 GitHub 仓库,发现一个提交记录
- 点击进去查看,可以看到提交的信息,和本地
git log
显示的是一样的
3. 创建第一个 GitHub 仓库——已有 READEME
1)当创建仓库时,点击了创建 READEME 文件:
2)此时仓库就不是空仓库了,而且包含了一次提交:
3)点击打开,看到一次初始化提交
4)接着复制仓库的地址:
5)本地仓库的创建,步骤一样,但是发现直接推送时出现了问题:
问题在于:本地仓库不是在远程仓库的基础上开发/提交的
- 远程仓库有 README 文件,本地仓库没有
- 本地仓库有 hello.txt 文件,远程仓库没有
此时需要先将远程仓库的内容拉取到本地,执行 git pull
,提示:没有当前分支的跟踪信息。
先执行红框中的命令,其中 <branch>
为需要拉取的远程仓库的分支,master
为拉取至本地仓库的 master
分支:
接着提示本地仓库的 master
分支已经跟踪至远程仓库的 master
分支,再尝试拉取:
又出现提示:拒绝合并不相关的历史。这是在初始化远程仓库添加 READEME文件 时有了一次 commit
,而本地仓库也有一次提交记录 create hello.txt
,执行命令,允许合并不相关历史,然后会执行一次 merge
操作:
上面是 merge
后的结果,其中执行命令时会弹出默认的编辑器,如果是 Vim:输入提交信息后,按下 ESC
后再键入两个大写的 Z
,会推出编辑器并且提交
最后就可以 push
到远程仓库了:
6)再 GitHub 上查看,文件已经推送成功了,并且提交记录变成了三条
7)点击查看提交记录,记录是由下至上的(最上面的是最新的)
最下面的是初始化仓库的提交
再上一条是本地仓库的提交记录
最上面的是
merge
操作
也就是说,本地仓库的提交历史写入了远程仓库提交历史中了,在本地 git log
也能查看从远程仓库合并的提交历史。
总结: 总的来看,这种方式是比较麻烦的,一般来说,处理个人的远程仓库,直接 git clone
下来,修改完再推送上去就行了。
4. clone 个人仓库
1)拷贝仓库地址,执行命令
这里将仓库名重命名为 clone-hello
2)进入文件目录,创建一个 local-hello.txt
文件,依次执行命令:
本地仓库的修改就会提交到远程仓库了,另外
- 当在
clone
远程仓库后在push
之前的这段时间中,远程仓库发生了改变,要先git pull
拉取远程仓库的改变,有冲突的话还要merge
,接着才能push
-
push
的前提是本地有推送至目标仓库的权限,否则提示Please make sure you have the correct access rights
3)在 GitHub 中查看仓库,发现文件已经推送上来了
4)在提交记录中,也看到了本地的提交
总结
熟悉一些基础的 Git 命令和 GitHub 的使用,以及记录在使用 GitHub 的过程中遇到的问题。