git的使用教程

 

创建公开密钥认证所需的 SSH Key,

并将其添加至 GitHub

ssh-keygen -t rsa -C "your_email@example.com"

id_rsa 文件是私有密钥,id_rsa.pub 是公开密钥。

Key 部分请粘贴 id_rsa.pub 文件里的内容。id_rsa.pub
的内容可以用如下方法查看。
$ cat 你的路径/id_rsa.pub

ssh-rsa 你的公有秘钥 xyyhqq@gmail.com

复制这里的全部 ssh到 .com 全部字符 到github的ssh秘钥部分

初始化仓库

 git init

查看仓库的状态

 git status

向暂存区中添加文件

git add

保存仓库的历史记录

git commit

记述一行提交信息

$ git commit -m "First commit"

记述详细提交信息

刚才我们只简洁地记述了一行提交信息,如果想要记述得更加详
细,请不加 -m,直接执行 git commit命令。执行后编辑器就会启
动,并显示如下结果。
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
#
# Initial commit

查看提交后的状态

git status

查看提交日志

 git log

只显示提交信息的第一行

git log --pretty=short

只显示指定目录、文件的日志

git log README.md

显示文件的改动

$ git log -p

比如,执行下面的命令,就可以只查看 README.md 文件的提交日
志以及提交前后的差别。
$ git log -p README.md

查看更改前后的差别

git diff

查看工作树和暂存区的差别

执行 git diff命令,查看当前工作树与暂存区的差别。
$ git diff
diff --git a/README.md b/README.md
index e69de29..cb5dc9f 100644
--- a/README.md
+++ b/README.md
@@ -0,0 +1 @@
+# Git教程

查看工作树和最新提交的差别

$ git diff HEAD
diff --git a/README.md b/README.md
index e69de29..cb5dc9f 100644
--- a/README.md
+++ b/README.md
@@ -0,0 +1 @@
+# Git教程

显示分支一览表

git branch

创建、切换分支

git checkout  - b 

切换到 feature - A 分支并进行提交

$ git checkout -b feature-A
Switched to a new branch 'feature-A'

$ git branch feature-A
$ git checkout feature-A

切换到 master 分支

现在我们再来看一看 master 分支有没有受到影响。首先切换至
master 分支。
$ git checkout master
Switched to branch 'master'

切换回上一个分支

现在,我们再切换回 feature-A 分支。
$ git checkout -
Switched to branch 'feature-A'

合并分支

git merge

接下来,我们假设 feature-A 已经实现完毕,想要将它合并到主干分
支 master 中。首先切换到 master 分支。
$ git checkout master
Switched to branch 'master'

然后合并 feature-A 分支。为了在历史记录中明确记录下本次分支合
并,我们需要创建合并提交。因此,在合并时加上 --no-ff参数

git merge --no-ff feature-A

默认信息中已经包含了是从 feature-A 分支合并过来的相关内容,所
以可不必做任何更改。将编辑器中显示的内容保存,关闭编辑器,然后
图灵社区会员 lxghost2 专享 尊重版权

就会看到下面的结果。
Merge made by the 'recursive' strategy.
README.md | 2 ++
1 file changed, 2 insertions(+)

git log  -- graph——以图表形式查看分支

git reset——回溯历史版本

回溯到创建 feature - A 分支前

让我们先回溯到上一节 feature-A 分支创建之前,创建一个名为
fix-B 的特性分支。
要让仓库的 HEAD、暂存区、当前工作树回溯到指定状态,需要用
到 git rest --hard命令。只要提供目标时间点的哈希值

完全恢复至该时间点的状态。事不宜迟,让我们执行下面的命令。
$ git reset --hard fd0cbf0d4a25f747230694d95cac1be72d33441d
HEAD is now at fd0cbf0 Add index

创建 fix - B 分支

现在我们来创建特性分支(fix-B)。
$ git checkout -b fix-B
Switched to a new branch 'fix-B'

作为这个主题的作业内容,我们在 README.md 文件中添加一行
文字。
# Git教程
- fix-B
然后直接提交 README.md 文件。
$ git add README.md
$ git commit -m "Fix B"
[fix-B 4096d9e] Fix B
1 file changed, 2 insertions(+)
现在的状态如图 4.5 所示。接下来我们的目标是图 4.6 中所示的状
态,即主干分支合并 feature-A 分支的修改后,又合并了 fix-B 的修改

推进至 feature - A 分支合并后的状态

git log命令只能查看以当前状态为终点的历史日志。所以这里
要使用 git reflog命令,查看当前仓库的操作日志。在日志中找出
回溯历史之前的哈希值,通过 git reset --hard命令恢复到回溯历
史前的状态。

首先执行 git reflog 命令,查看当前仓库执行过的操作的日志。

$ git reflog
4096d9e HEAD@{0}: commit: Fix B
fd0cbf0 HEAD@{1}: checkout: moving from master to fix-B
fd0cbf0 HEAD@{2}: reset: moving to fd0cbf0d4a25f747230694d95cac1be72d33441d
83b0b94 HEAD@{3}: merge feature-A: Merge made by the 'recursive' strategy.
fd0cbf0 HEAD@{4}: checkout: moving from feature-A to master
8a6c8b9 HEAD@{5}: checkout: moving from master to feature-A
fd0cbf0 HEAD@{6}: checkout: moving from feature-A to master
8a6c8b9 HEAD@{7}: commit: Add feature-A
fd0cbf0 HEAD@{8}: checkout: moving from master to feature-A
fd0cbf0 HEAD@{9}: commit: Add index
9f129ba HEAD@{10}: commit (initial): First commit

$ git checkout master


$ git reset --hard 83b0b94
HEAD is now at 83b0b94 Merge branch 'feature-A'

 消除冲突

$ git merge --no-ff fix-B
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Recorded preimage for 'README.md'
Automatic merge failed; fix conflicts and then commit the result.

查看冲突部分并将其解决

用编辑器打开 README.md 文件,就会发现其内容变成了下面这个
样子。

Git教程
<<<<<<< HEAD
- feature-A
=======
- fix-B
>>>>>>> fix-B

======= 以上的部分是当前 HEAD 的内容,以下的部分是要合并
的 fix-B 分支中的内容。我们在编辑器中将其改成想要的样子。
# Git教程
- feature-A
- fix-B

如上所示,本次修正让 feature-A 与 fix-B 的内容并存于文件之中。
但是在实际的软件开发中,往往需要删除其中之一,所以各位在处理冲
突时,务必要仔细分析冲突部分的内容后再行修改

提交解决后的结果

冲突解决后,执行 git add命令与 git commit命令

$ git add README.md


$ git commit -m "Fix conflict"
Recorded resolution for 'README.md'.
[master 6a97e48] Fix conflict

git commit  -- amend——修改提交信息

git rebase  - i——压缩历史

创建 feature - C 分支

首先,新建一个 feature-C 特性分支。

$ git checkout -b feature-C
Switched to a new branch 'feature-C'

提交这部分内容。这个小小的变更就没必要先执行 git add命令再

执行 git commit命令了,

我们用

git commit -am命令

来一次完成这两步操作。
$ git commit -am "Add feature-C"
[feature-C 7a34294] Add feature-C
1 file changed, 1 insertion(+)

修正拼写错误

现在来修正刚才预留的拼写错误。请各位自行修正 README.md 文
件的内容,修正后的差别如下所示。

$ git diff
diff --git a/README.md b/README.md
index ad19aba..af647fd 100644
--- a/README.md
+++ b/README.md
@@ -2,4 +2,4 @@
- feature-A
- fix-B
- - faeture-C
+ - feature-C


然后进行提交。


$ git commit -am "Fix typo"
[feature-C 6fba227] Fix typo
1 file changed, 1 insertion(+), 1 deletion(-)

更改历史

因此,我们来更改历史。将 "Fix typo"修正的内容与之前一次的
提交合并,在历史记录中合并为一次完美的提交。为此,我们要用到
git rebase命令。
$ git rebase -i HEAD~2

合并至 master 分支

在 GitHub 上新建一个仓库。

为防止与其他仓
库混淆,仓库名请与本地仓库保持一致,即 git-tutorial。创建时请不要
勾选 Initialize this repository with a README 选项(图 4.8)。因为一旦勾
选该选项,GitHub 一侧的仓库就会自动生成 README 文件,从创建之
初便与本地仓库失去了整合性。虽然到时也可以强制覆盖,但为防止这
一情况发生还是建议不要勾选该选项,直接点击 Create repository 创建
仓库。

git remote add——添加远程仓库

在 GitHub 上创建的仓库路径为“git@github.com:用户名 /
git-tutorial.git”。现在我们用 git remote add命令将它设置
成本地仓库的远程仓库
A 。
$ git remote add origin git@github.com:github-book/git-tutorial.git
按照上述格式执行 git remote add命令之后,Git 会自动将
git@github.com:github-book/git-tutorial.git远程仓库的
名称设置为 origin(标识符)。

git push——推送至远程仓库 

推送至 master 分支
如果想将当前分支下本地仓库中的内容推送给远程仓库,需要用到
git push命令。现在假定我们在 master 分支下进行操作。
$ git push -u origin master
Counting objects: 20, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (10/10), done.
Writing objects: 100% (20/20), 1.60 KiB, done.
Total 20 (delta 3), reused 0 (delta 0)
To git@github.com:github-book/git-tutorial.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.

推送至 master 以外的分支

除了 master 分支之外,远程仓库也可以创建其他分支。举个例子,我
们在本地仓库中创建 feature-D 分支,并将它以同名形式 push 至远程仓库。
$ git checkout -b feature-D
Switched to a new branch 'feature-D'

我们在本地仓库中创建了 feature-D 分支,现在将它 push

给远程仓库并保持分支名称不变。
$ git push -u origin feature-D
Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:github-book/git-tutorial.git
* [new branch] feature-D -> feature-D
Branch feature-D set up to track remote branch feature-D from origin.

git clone——获取远程仓库

首先我们换到其他目录下,将 GitHub 上的仓库 clone 到本地。注意


不要与之前操作的仓库在同一目录下。
$ git clone git@github.com:github-book/git-tutorial.git
Cloning into 'git-tutorial'...
remote: Counting objects: 20, done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 20 (delta 3), reused 20 (delta 3)
Receiving objects: 100% (20/20), done.
Resolving deltas: 100% (3/3), done.
$ cd git-tutorial

执行 git clone命令后我们会默认处于 master 分支下,同时系统
会自动将 origin 设置成该远程仓库的标识符。也就是说,当前本地仓库
的 master 分支与 GitHub 端远程仓库(origin)的 master 分支在内容上是
完全相同的。
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/feature-D
remotes/origin/master

获取远程的 feature - D 分支

我们试着将 feature-D 分支获取至本地仓库。
$ git checkout -b feature-D origin/feature-D
Branch feature-D set up to track remote branch feature-D from origin.
Switched to a new branch 'feature-D'

向本地的 feature - D 分支提交更改


现在假定我们是另一名开发者,要做一个新的提交。在 README.
md 文件中添加一行文字,查看更改。
$ git diff
diff --git a/README.md b/README.md
index af647fd..30378c9 100644
--- a/README.md
+++ b/README.md
@@ -3,3 +3,4 @@
- feature-A
- fix-B
- feature-C
+ - feature-D

向本地的 feature - D 分支提交更改


现在假定我们是另一名开发者,要做一个新的提交。在 README.
md 文件中添加一行文字,查看更改。
$ git diff
diff --git a/README.md b/README.md
index af647fd..30378c9 100644
--- a/README.md
+++ b/README.md
@@ -3,3 +3,4 @@
- feature-A
- fix-B
- feature-C
+ - feature-D

按照之前学过的方式提交即可。
$ git commit -am "Add feature-D"
[feature-D ed9721e] Add feature-D
1 file changed, 1 insertion(+)

推送 feature - D 分支

现在来推送 feature-D 分支。
$ git push
Counting objects: 5, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 281 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
To git@github.com:github-book/git-tutorial.git
ca0f98b..ed9721e feature-D -> feature-D

git pull——获取最新的远程仓库分支


现在我们放下刚刚操作的目录,回到原先的那个目录下。这边的本
地仓库中只创建了 feature-D 分支,并没有在 feature-D 分支中进行任何
图灵社区会员 lxghost2 专享 尊重版权
68   第 4 章 通过实际操作学习 Git
提交。然而远程仓库的 feature-D 分支中已经有了我们刚刚推送的提交。
这时我们就可以使用 git pull 命令,将本地的 feature-D 分支更新到最新
状态。当前分支为 feature-D 分支。
$ git pull origin feature-D
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (1/1), done.
remote: Total 3 (delta 1), reused 3 (delta 1)
Unpacking objects: 100% (3/3), done.
From github.com:github-book/git-tutorial
* branch feature-D -> FETCH_HEAD
First, rewinding head to replay your work on top of it...
Fast-forwarded feature-D to ed9721e686f8c588e55ec6b8071b669f411486b8.

原文地址:https://www.cnblogs.com/xyyhcn/p/11672377.html