$ ssh-keygen -t rsa -C "[email protected]"
"[email protected]"
的部分请改成自己的GitHub注册邮箱地址。
id_rsa 文件是私有密钥,id_rsa.pub 是公开密钥。
$ cat ~/.ssh/id_rsa.pub
将上面命令执行后显示的公钥内容复制粘贴到 GitHub 中 公钥添加成功之后,邮箱会收到一封提示“公共密钥添加完成”的邮件。
完成以上设置后,就可以用手中的私有密钥与GitHub进行认证和通信了。
$ git -T [email protected]
$ git clone [email protected]:lw1024/Git-learning-notes.git
$ git status
$ git add [要提交的文件]
$ git commit -m "提交信息描述"
$ git log
$ git push
$ mkdir git-tutorial
$ cd git-tutorial
$ git init
$ touch README.md
$ git status
$ git add README.md
$ git status
$ git commit -m "First commit"
记述一行提交信息
-m 参数后的“First commit”称作提交信息,是对这个提交的概述。
记述详细提交信息
如果想要记述得更加详细,请不要加
- m
,直接执行git commit
命令。执行后编辑器就会启动。
在编辑器中记述提交信息的格式如下:
1. 第一行:用一行文字简述提交的更改内容
2. 第二行:空行
3. 第三行以后:记述更改的原因和详细内容
将提交信息按格式记述完毕后,保存并关闭编辑器。刚才记述的提交信息就会被提交。
终止提交
如果在编辑器启动后想终止提交,请将提交信息留空并直接关闭编辑器,随后提交就会被终止。
$ git log
只显示提交信息的第一行
$ git log --pretty=short
只显示指定目录、文件的日志
$ git log README.md
显示文件的改动
$ git log -p
$ git log -p README.md
查看工作树和暂存区的差别
$ git diff
查看工作树和最新提交的差别
$ git add README.md
$ git diff HEAD
这里的HEAD
是指向当前分支中最新一次提交的指针。
$ git branch
* master
*
表示当前所在分支
$ git checkout -b feature-A
Switched to a new branch 'feature-A'
连续执行下面两条命令也能收到同样效果。
$ git branch feature-A
$ git checkout feature-A
$ git checkout master
Switched to branch 'master'
$ git checkout -
Switched to branch 'feature-A'
首先切换到 master
分支
$ git checkout master
然后合并 feature-A
分支
$ git merge --no-ff feature-A
随后编辑器会启动,用于录入合并提交的信息。 默认信息中已经包含了相关内容,所以可以不必做任何修改。将编辑器中显示的内容保存,关闭编辑器,然后就会执行合并提交。
$ git log --graph
$ git reset --hard 09c87c50c6b09ca50c39b4a1e3be2515c14de2ce
$ git checkout -b fix-B
在 README.md 文件中添加一行文字,然后提交。
$ git add README.md
$ git commit -m "Fix B"
首先,查看当前仓库执行过的操作日志。
$ git reflog
在日志记录中找到 feature-A 分支合并后的状态所对应的哈希值。
$ git checkout master
$ git reset --hard d59e11a
消除冲突 进行合并操作。
$ git merge --no-ff fix-B
此时可能会产生冲突。用编辑器打开发生冲突的文件,查看冲突部分并将其解决。 提交解决后的结果
$ git add README.md
$ git commit -m "Fix conflict"
$ git commit --amend
执行上面的命令后,编辑器就会启动。请将提交信息的部分修改为 Merge branch 'fix-B',然后保存文件,关闭编辑器。随后修改就完成了。
$ git checkout -b feature-C
然后在 README.md 文件中添加一行文字,并故意留下拼写错误,一边之后修正。
提交这部分内容
$ git commit -am "Add feature-C"
现在打开 README.md 文件,并修正错误。然后进行提交。
$ git commit -am "Fix typo"
因为这类错误并不需要在历史记录中展现出来,所以我们将这次提交与之前的一次提交合并。
$ git rebase -i HEAD~2
*上述命令可以选定当前分支中包含 HEAD (最新提交)在内的两个
最新历史记录为对象,并在编辑器中打开。 *
pick 7a34294 Add feature-C
pick 6fba227 Fix typo
我们将6fba227
的Fix typo
的历史记录压缩到7a34294
的Add feature-C
里。
按照下面所示,将6fba227
左侧的pick
改写为fixup
。
pick 7a34294 Add feature-C
fixup 6fba227 Fix typo
保存并关闭编辑器。 系统提示 rebase 成功。也就是将“Fix typo”的内容合并到“Add feature-C”中,并改写成一个新的提交(哈希值会更改)。
$ git checkout master
$ git merge --no-ff feature-C
首先,在 GitHub 上创建一个仓库,并将其设置为本地仓库的远程仓库。 为防止与其他仓库混淆,仓库名请与本地仓库保持一致,即 git-tutorial。
$ git remote add origin [email protected]:用户名/git-tutorial.git
执行命令之后,git 会自动将远程仓库的名称设置为 origin。
如果想将当前分支下本地仓库中的内容推送给远程仓库,需要用到 git push命令。
$ git push -u origin master
-u 参数可以在推送的同时,将 origin 仓库的 master 分支设置为本地仓库当前分支的 upstream(上游)。添加了这个参数,将来运行 git pull
命令从远程仓库获取内容时,本地仓库的这个分支就可以直接从 origin 的 master 分支获取内容,省去了另外添加参数的的麻烦。
$ git checkout -b feature-D
$ git push -u origin feature-D
从实际开发者的角度出发,在另一个目录下新建一个本地仓库,学习从远程仓库获取内容的相关操作。
首先,切换到其他目录下,将 GitHub 上的仓库 clone 到本地。
$ git clone [email protected]:用户名/git-tutorial.git
执行git clone
命令后默认处于 master 分支下,同时系统会自动将 origin 设置成改远程仓库的额标识符。
查看当前分支的相关信息
$ git branch -a
添加-a
参数可以同时显示本地仓库和远程仓库的分支信息。
$ git checkout -b feature-D origin/feature-D
为了便于理解,我们仍将其命名为 feature-D。
在 README.md 文件中添加一行文字。然后提交。
$ git commit -am "Add feature-D"
$ git push
现在,回到原先的那个目录下。 将当前分支切换到 feature-D 分支。
$ git pull origin feature-D
[TOC]