目录

GIT学习记录

配置github与gitlib两个账号

  1. ssh-keygen -t rsa -C "your_name@github.com" #生成github的rsa
  2. #将 rsa与rsa.pub放到user/yourname/.ssh下
  3. ssh-keygen -t rsa -C "your_name@gitlab.com" #生成gitlab的rsa,文件名称与刚才的github区别
  4. # 同样将两个文件放到.ssh文件夹下
  1. #在 .ssh文件夹下创建config文件,名称就叫config
  2. # gitlab
  3. Host as-gitlab.cisco.com
  4. HostName as-gitlab.cisco.com
  5. PreferredAuthentications publickey
  6. IdentityFile ~/.ssh/gitlab_id-rsa
  7. # github
  8. Host github.com
  9. HostName github.com
  10. PreferredAuthentications publickey
  11. IdentityFile ~/.ssh/id_rsa

当然最后一步就是用文本编辑打开.pub文件,将里面的公钥分别放到github与gitlab中。至此两个都能够使用了。

基本操作

git init:初始化仓库

  • 新建文件夹test,
  • 进入test,右键 Git Bash Here
  • 键入 git init
  • 在test文件夹中会增加一个.git的子目录,该文件夹中保存着管理当前目录内容所需的仓库数据
  • 我们将test文件夹称为附属于该仓库的工作树

git status:查看仓库状态

工作树与仓库被操作之后,可以使用git status 查看当前状态。

  • 当没有任何变化时会返回如下信息
  1. $ git status
  2. On branch master
  3. No commits yet
  4. nothing to commit (create/copy files and use "git add" to track)
  5. # 在master分支下,没有任何东西可以提交
  • 创建一个README.md,之后再运行 git status
  1. $ touch README.md
  2. $ git status
  3. On branch master
  4. No commits yet
  5. Untracked files:
  6. (use "git add <file>..." to include in what will be committed)
  7. README.md
  8. nothing added to commit but untracked files present (use "git add" to track)
  9. # 显示新加的README.md文件,无记录,就是没有被git仓库管理

git add :向缓存区中添加文件

刚才创建了README.md文件,现在我们把它加到git仓库中

  1. $ git add README.md # 如果文件特别多可以使用 git add .(是空格.),但是不建议这样做
  2. $ git status
  3. On branch master
  4. No commits yet
  5. Changes to be committed:
  6. (use "git rm --cached <file>..." to unstage)
  7. new file: README.md
  8. # 显示等待着提交的改变

git commit 保存仓库的历史记录

下面我将我们新建的文件提交到git的历史记录中,

  1. $ git commit -m 'First Commit'
  2. [master (root-commit) 9f129ba] First commit
  3. 1 file changed, 0 insertions(+), 0 deletions(-)
  4. create mode 100644 README.md
  5. # -m 参数可以输入一个简短的备注,如果比较长,可以不加-m 将会进入编辑模式
  6. # 编辑模式与vi的操作一样,按insert输入文字,:wq保存退出即可
  7. # 在编辑模式下如果不输入comment直接退出,将会自动取消提交

提交之后我们再查看仓库状态

  1. $ git status
  2. On branch master
  3. nothing to commit, working tree clean

注:补充一个命令 git commit -am,可以起到 git add + git commit -m两个命令的效果

git log 查看提交日志

git log可以查看以往的仓库中的提交的日志包括可以查看什么人在什么时候进行了提交或合并。

  1. $ git log
  2. commit 274487c29eef98e8eaba26ec207075c396445a89 (HEAD -> master)
  3. Author: KanePD <18842634041@163.com>
  4. Date: Thu Mar 14 14:07:33 2019 +0800
  5. First Commit
  6. # 显示简述信息
  7. $ git log --pretty=short # = 左右两边不要有空格,否则会报错
  8. commit 274487c29eef98e8eaba26ec207075c396445a89 (HEAD -> master)
  9. Author: KanePD <18842634041@163.com>
  10. First Commit
  11. #显示某个文件的log信息
  12. $ git log README.md
  13. commit 274487c29eef98e8eaba26ec207075c396445a89 (HEAD -> master)
  14. Author: KanePD <18842634041@163.com>
  15. Date: Thu Mar 14 14:07:33 2019 +0800
  16. First Commit
  17. #显示文件的改动
  18. $ git log -p
  19. commit 274487c29eef98e8eaba26ec207075c396445a89 (HEAD -> master)
  20. Author: KanePD <18842634041@163.com>
  21. Date: Thu Mar 14 14:07:33 2019 +0800
  22. First Commit
  23. diff --git a/README.md b/README.md
  24. new file mode 100644
  25. index 0000000..e69de29
  26. #显示某个文件的改动
  27. $ git log -p README.md

注:如果想要退出log模式直接按一个q就可以

git diff : 查看工作树、暂存区、最新提交的差别

  • 工作树与暂存区的差别
  1. # 我们更改 README.md增加 `# GIT`保存后键入 `git diff`
  2. $ git diff
  3. diff --git a/README.md b/README.md
  4. index e69de29..a25b2f0 100644
  5. --- a/README.md
  6. +++ b/README.md
  7. @@ -0,0 +1,2 @@
  8. +# GIT
  9. +
  10. # 只显示了工作树与最新提交的差别
  11. $ git add .# 我们将这次提交放入暂存区
  12. # 继续修改README.md 加入 `# GIT2`
  13. $ git diff
  14. $ git diff
  15. #-----------------------------------
  16. diff --git a/README.md b/README.md
  17. index a25b2f0..35b4006 100644
  18. --- a/README.md
  19. +++ b/README.md
  20. @@ -1,2 +1,4 @@
  21. # GIT
  22. +# GIT2
  23. +
  24. #-----------------------------------
  25. # 可以看到工作树、暂缓去的差别都出来了
  • 工作树、暂存区与最新提交的差别
  1. $ git diff HEAD
  2. diff --git a/README.md b/README.md
  3. index e69de29..35b4006 100644
  4. --- a/README.md
  5. +++ b/README.md
  6. @@ -0,0 +1,4 @@
  7. +# GIT
  8. +
  9. +# GIT2
  10. +

注:书上说这个是工作树与最新提交的差别,但是我自己尝试的时候上面的#GIT 是暂存区的东西,所以这个指令应该是无论是git 记录上(暂存区)没记录上(工作树)的内容与最新提交的差别。

  • 将修改内容提交
  1. $ git add .
  2. # 此时修改的两个内容都在暂存区,我又执行了一次 git diff HEAD 发现与上面的结果相同
  3. $ git commit -m 'Add index'
  • 再次查看 git log
  1. $ git log
  2. commit 72838f5f7c1943b51900c0f40a54ea28e1daf479 (HEAD -> master)
  3. Author: KanePD <18842634041@163.com>
  4. Date: Thu Mar 14 14:58:11 2019 +0800
  5. Add index
  6. commit 274487c29eef98e8eaba26ec207075c396445a89
  7. Author: KanePD <18842634041@163.com>
  8. Date: Thu Mar 14 14:07:33 2019 +0800
  9. First Commit

至此基本操作已经完成了

关于分支(Branch)的操作

git branch :显示分支一览表

  1. $ git branch -a
  2. * master
  3. # 有*【星号】的branch为当前使用的branch

git checkout -b :创建、切换分支

  • 创建、切换分支
  1. $ git checkout -b feature-A master
  2. Switched to a new branch 'feature-A'
  3. # 注书上介绍的时候没有后面的master
  4. # 最后面的master的意思是基于master创建分支 feature-A
  5. # 如果不加这个部分的参数,会基于当前操作的branch创建分支
  6. # ---------------------------------------------
  7. # 上面的指令其实是做了如下两个指令
  8. $ git branch feature-A #先创建
  9. $ git checkout feature-A#再切换
  10. # 此时查看当前分支一览
  11. $ git branch
  12. * feature-A
  13. master
  14. # 发现当前为 feature-A

注:这里有一个问题,书上创建的feature-A分支中的README.md中什么都没有,而我创建的时候里面拥有了master的数据了,我尝试了确实是如果不加后面的参数的话,是以master为基础创建的。我在项目中也尝试了,确实是基于当前分支创建的。所以书上应该是有问题的。

  • 对当前分支进行一些操作
  1. # 修改READM.md 增加 `- feature-A`
  2. $ git add README.md
  3. $ git commit -m 'Add feature-A'
  4. # 在这之后 这一行就在分支feature-A中的README.md中有了
  5. #-------------------------------
  6. # 我们切换回master分支
  7. $ git checkout master
  8. Switched to branch 'master'
  9. $ cat README.md
  10. # GIT
  11. # GIT2
  12. # 发现在master 的README.md中并没有`- feature-A`这一行
  • 切换回上一个分支
  1. # 这是一个简便的操作
  2. git checkout -
  • 在这里介绍几个概念

    注:不代表以下概念是并行的,可能没有关联性

    • 培育分支

    我们创建好feature-A之后,一直对分支feature-A进行操作、修改,提交也是提交到feature-A这个分支中。像这样不断地对一个分支进行提交的操作,我们成为“培育分支”

    • 特性分支

    除了完成该分支要完成的工作之外,不再做其他任何的代码修改。在这个分支上只实现单一特性。如果这个分支提交后,发现了bug ,也要重新创建分支,进行修改。

    • 主干分支

    主干分支是特性分支的原点,也是合并的终点。一般以master做主干分支

git merge : 合并分支

我们要做的工作是将 feature-A branch的东西合并到master

  1. # 切换到master分支
  2. $ git checkout master
  3. Switched to branch 'master'
  4. # 执行合并命令
  5. # 书上的命令是git merge --no --ff feature-A,但是--no已经没有了 --ff 是默认的
  6. $ git merge feature-A
  7. Updating 72838f5..4aff578
  8. Fast-forward
  9. README.md | 1 +
  10. 1 file changed, 1 insertion(+)
  11. # 书上说会进入编辑模式,但是此处我并没有进入编辑模式
  12. # 可使用 git merge -e进入编辑模式
  13. # -------------------
  14. # 既然branch feature-A的东西已经merge到 master上了 就可以删除掉了。
  15. # 当然在删除之前,最好先推到远端,
  16. # 由于这个分支再下一部分还需要使用,我没有真正的执行删除命令
  17. $ git branch -d feature-A

git log --graph:以图表的方式查看分支

书上说里面可以看到合并的操作,但是我并没有看见。我后来又创建了一个分支,还是看不到,只能看到如下信息

注:后来明白了,我再合并feature-A到master时没有冲突并没有做合并这个操作,所以没有

  1. $ git log --graph
  2. * commit dfa1d86e8c850a020a1edfe866095d8f89204048 (HEAD -> feature-A, test)
  3. | Author: KanePD <18842634041@163.com>
  4. | Date: Thu Mar 14 17:17:39 2019 +0800
  5. |
  6. | test-1
  7. |
  8. * commit 0c74e08b9672eac7a36582d4abf5d3face77c83e
  9. | Author: KanePD <18842634041@163.com>
  10. | Date: Thu Mar 14 17:16:58 2019 +0800
  11. |
  12. | test-1
  13. |
  14. * commit 6f28d3388bbde22f273769a14596c8413f070116 (master)
  15. | Author: KanePD <18842634041@163.com>
  16. | Date: Thu Mar 14 17:07:29 2019 +0800
  17. |
  18. | Twice change for feature-A
  19. |
  20. * commit 4aff578e78688112e9c5d2a42af7da90da3310b5
  21. | Author: KanePD <18842634041@163.com>
  22. | Date: Thu Mar 14 15:13:06 2019 +0800
  23. |
  24. | Add feature-A
  25. * commit 72838f5f7c1943b51900c0f40a54ea28e1daf479
  26. | Author: KanePD <18842634041@163.com>
  27. | Date: Thu Mar 14 14:58:11 2019 +0800
  28. |
  29. | Add index
  30. |
  31. * commit 274487c29eef98e8eaba26ec207075c396445a89
  32. Author: KanePD <18842634041@163.com>
  33. Date: Thu Mar 14 14:07:33 2019 +0800
  34. First Commit
  35. # 可以看到 从第一次提交到后来的提交,
  36. # 可以看到master拥有哪些commit
  37. # 可以看到feature 与 test分别拥有哪些commit
  38. # merge信息没有看到,不知道为什么
  39. # 我们可以输入 git reflog 查看当前的操作日志
  40. $ git reflog
  41. dfa1d86 (test) HEAD@{2}: merge test: Fast-forward
  42. 6f28d33 (master) HEAD@{3}: checkout: moving from master to feature-A
  43. 6f28d33 (master) HEAD@{4}: checkout: moving from test to master
  44. dfa1d86 (test) HEAD@{5}: commit: test-1
  45. 0c74e08 HEAD@{6}: commit: test-1
  46. 6f28d33 (master) HEAD@{7}: checkout: moving from master to test
  47. 6f28d33 (master) HEAD@{8}: checkout: moving from feature-A to master
  48. 6f28d33 (master) HEAD@{9}: checkout: moving from master to feature-A
  49. 6f28d33 (master) HEAD@{10}: merge feature-A: Fast-forward (no commit created; -m option ignored)
  50. 4aff578 HEAD@{11}: checkout: moving from feature-A to master
  51. 6f28d33 (master) HEAD@{12}: commit: Twice change for feature-A
  52. 4aff578 HEAD@{13}: checkout: moving from master to feature-A
  53. 4aff578 HEAD@{14}: checkout: moving from feature-A to master
  54. 4aff578 HEAD@{15}: checkout: moving from master to feature-A
  55. 4aff578 HEAD@{16}: merge feature-A: Fast-forward
  56. 72838f5 (HEAD -> fix-B, feature-A) HEAD@{17}: checkout: moving from feature-A to master
  57. 4aff578 HEAD@{18}: checkout: moving from master to feature-A

更改已经提交的操作

git reset : 回溯历史版本

我们回到feature-A分支之前,创建一个新的分支fix-B。从上面的git log的信息可以查看出feature-A分支之前的哈希值是72838f5f7c1943b51900c0f40a54ea28e1daf479

  1. $ git reset --hard 72838f5f7c1943b51900c0f40a54ea28e1daf479
  2. HEAD is now at 72838f5 Add index
  3. # 我们再输入git log
  4. $ git log
  5. commit 72838f5f7c1943b51900c0f40a54ea28e1daf479 (HEAD -> feature-A)
  6. Author: KanePD <18842634041@163.com>
  7. Date: Thu Mar 14 14:58:11 2019 +0800
  8. Add index
  9. commit 274487c29eef98e8eaba26ec207075c396445a89
  10. Author: KanePD <18842634041@163.com>
  11. Date: Thu Mar 14 14:07:33 2019 +0800
  12. First Commit
  13. # 发现只剩这两次提交了
  14. # 创建新的分支 fix-B
  15. $ git checkout -b fix-B
  16. Switched to a new branch 'fix-B'
  17. # 更改README.md
  18. vi README.md
  19. $ cat README.md
  20. # GIT
  21. # GIT2
  22. - fix-B
  23. # 发现只多了fix-B feature-A与test的branch的东西都不在
  24. $ git add .
  25. $ git commit -m 'fix-B'
  26. # 下面我要将fix-B分支合并到master上
  27. ####################一定要先切换到master分支上,否则合并不上
  28. $ git checkout master
  29. # 我们同样输入 git reflog 查到合并feature-A的哈希值为6f28d33
  30. # 进行合并fix-B
  31. $ git reset --hard 6f28d33
  32. # 会报冲突,需要解决冲突,整个状态如下
  33. Auto-merging README.md
  34. CONFLICT (content): Merge conflict in README.md
  35. Automatic merge failed; fix conflicts and then commit the result.
  36. kanewang@KANEWANG-NGTKD MINGW64 /c/Workflow/GitHub/test (master|MERGING)
  37. # 这个时候我们可以 git merge --abort来取消这个合并
  38. # 我们此时打开README.md
  39. vi README.md #内容如下
  40. # GIT
  41. # GIT2
  42. <<<<<<< HEAD
  43. - feature-A
  44. - feature-A-1
  45. - feature-A-2
  46. - test-1
  47. =======
  48. - fix-B
  49. >>>>>>> fix-B
  50. # 我们两个都要,删除掉多余的行并保存
  51. # 之后 重新 git add 与 git commit

这次有了合并之后我们再看一下git log --graph的功能,终于有效果了。

  1. $ git log --graph
  2. * commit 217ecb7bff4b945f6a8bbb9da7098463db178d62 (HEAD -> master)
  3. |\ Merge: dfa1d86 e38c3ed
  4. | | Author: KanePD <18842634041@163.com>
  5. | | Date: Thu Mar 14 21:43:05 2019 +0800
  6. | |
  7. | | merge fix-B to master
  8. | |
  9. | * commit e38c3ede8cfe2b668ea61893691802b5a257be68 (fix-B)
  10. | | Author: KanePD <18842634041@163.com>
  11. | | Date: Thu Mar 14 21:33:23 2019 +0800
  12. | |
  13. | | Fix B
  14. | |
  15. * | commit dfa1d86e8c850a020a1edfe866095d8f89204048
  16. | | Author: KanePD <18842634041@163.com>
  17. | | Date: Thu Mar 14 17:17:39 2019 +0800
  18. | |
  19. | | test-1
  20. | |
  21. * | commit 0c74e08b9672eac7a36582d4abf5d3face77c83e
  22. | | Author: KanePD <18842634041@163.com>
  23. | | Date: Thu Mar 14 17:16:58 2019 +0800
  24. | |
  25. | | test-1
  26. | |
  27. * | commit 6f28d3388bbde22f273769a14596c8413f070116
  28. | | Author: KanePD <18842634041@163.com>
  29. | | Date: Thu Mar 14 17:07:29 2019 +0800
  30. | |
  31. | | Twice change for feature-A
  32. | |
  33. * | commit 4aff578e78688112e9c5d2a42af7da90da3310b5
  34. |/ Author: KanePD <18842634041@163.com>
  35. | Date: Thu Mar 14 15:13:06 2019 +0800
  36. |
  37. | Add feature-A
  38. |
  39. * commit 72838f5f7c1943b51900c0f40a54ea28e1daf479 (feature-A)
  40. | Author: KanePD <18842634041@163.com>
  41. | Date: Thu Mar 14 14:58:11 2019 +0800
  42. |
  43. | Add index
  44. |
  45. * commit 274487c29eef98e8eaba26ec207075c396445a89
  46. Author: KanePD <18842634041@163.com>
  47. Date: Thu Mar 14 14:07:33 2019 +0800
  48. First Commit

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

有时候提交的时候会出现一些小的纰漏,那么我们该怎么办呢

  1. # 执行这个命令编辑器就会启动
  2. $ git commit --amend
  3. # 复制不了了 上图

  1. # 将merge fix-B to master 修改为 merge fix-B to master amend
  2. # 保存并退出
  3. [test1 3c1840a] merge fix-B to master amend
  4. Date: Thu Mar 14 21:43:05 2019 +0800
  5. # git log 查看当前commit
  6. $ git log
  7. commit 3c1840aa293fc14c32dec47ec656e559512542f9 (HEAD -> test1)
  8. Merge: dfa1d86 e38c3ed
  9. Author: KanePD <18842634041@163.com>
  10. Date: Thu Mar 14 21:43:05 2019 +0800
  11. merge fix-B to master amend
  12. # 信息已经更改

git rebase -i :压缩历史

有些时候如果发现了提交之后有错误, 我们再提交一个版本将错误更改了,但是就会有两次提交记录下来。我们可以将这两次提交合并。

  1. # 创建一个新的branch feature-C
  2. $ git checkout -b feature-C
  3. # 我们再README.md中增加一个错误的单次
  4. # faeture-C 留着以后哦更改
  5. # 使用 git commit -am 代替git add 与git commit -m
  6. $ git commit -am 'feature-C wrong spell'
  7. # 这时发现了错误,我们再去修改它,并再提交一个版本
  8. $ git commit -am 'feature-C correct wrong spell'
  9. # 我们查看一下 git log,只列出feature-C的两个提交
  10. $ git log
  11. commit 24e5a4cbd1bb8bcec6cc93bbde0c755d38925268 (HEAD -> feature-C)
  12. Author: KanePD <18842634041@163.com>
  13. Date: Fri Mar 15 10:04:02 2019 +0800
  14. feature-C correct wrong spell
  15. commit 5c8787c8bb5605c22d5a641e0ed45610f24ccc56
  16. Author: KanePD <18842634041@163.com>
  17. Date: Fri Mar 15 10:01:39 2019 +0800
  18. feature-C wrong spell
  19. # 下面我们rebase一下
  20. # HEAD~2的意思是,拿最新的两个commit出来
  21. $ git rebase -i HEAD~2

  1. # 将feature-C correct wrong spell前面的pick 改成fixup
  2. # 将会把 feature-C correct wrong spell合并到 feature-C wrong spell上
  3. # 我们在查看git log
  4. $ git log
  5. commit 5c8787c8bb5605c22d5a641e0ed45610f24ccc56
  6. Author: KanePD <18842634041@163.com>
  7. Date: Fri Mar 15 10:01:39 2019 +0800
  8. feature-C wrong spell
  9. # 发现已经没有 feature-C correct wrong spell 的commit了 我们成功的清除了这个历史

上面的方法是书上的,下面组内一位大哥教的也可以实现上面的功能

  1. # 下面我运用另一个方法将 testtest2合并到testtest1上,
  2. $ git log -p
  3. commit faeeba645a121e4b97dfa321cecab8d20b90fcf0 (HEAD -> feature-C)
  4. Author: KanePD <18842634041@163.com>
  5. Date: Fri Mar 15 11:25:37 2019 +0800
  6. testtest3
  7. diff --git a/README.md b/README.md
  8. index 479269c..bc5359c 100644
  9. --- a/README.md
  10. +++ b/README.md
  11. @@ -16,3 +16,4 @@
  12. - test3:wq!
  13. - testtest1
  14. - testtest2
  15. +- testtest3
  16. commit 94c5e65dd4afbe17d042272208dbc574d949c818
  17. Author: KanePD <18842634041@163.com>
  18. Date: Fri Mar 15 11:25:25 2019 +0800
  19. testtest2
  20. diff --git a/README.md b/README.md
  21. index cf9e2be..479269c 100644
  22. --- a/README.md
  23. +++ b/README.md
  24. @@ -15,3 +15,4 @@
  25. - test2
  26. - test3:wq!
  27. - testtest1
  28. +- testtest2
  29. commit 39249bfa6ed8cf878ccff11347f84138db6274ba
  30. Author: KanePD <18842634041@163.com>
  31. Date: Fri Mar 15 11:25:06 2019 +0800
  32. testtest1
  33. diff --git a/README.md b/README.md
  34. index dc87501..cf9e2be 100644
  35. --- a/README.md
  36. +++ b/README.md
  37. @@ -14,4 +14,4 @@
  38. - test1
  39. - test2
  40. - test3:wq!
  41. -
  42. +- testtest1
  43. # 查看三个commit 每个commit 增加一行我要吧testtest2的commit合并到testtest1上
  44. $ git rebase -i HEAD~3#进入rebase编辑模式
  45. # 将testtest2前面的pick 修改为 edit 保存退出
  46. # 此时会显示停在testtest2的commit上
  47. $ git reset HEAD~1 #此处HEAD是reset到前两个commit点上 也是testtest1那个位置
  48. #我们reset到test1的节点上,会提示未声明的改动
  49. Unstaged changes after reset:
  50. M README.md
  51. $ git add .将这部分的改动加进入
  52. $ git commit --amend #进入修改commit界面,想要改commit的备注 可以修改,不修改的话直接退出
  53. $ git rebase --continue #退出后 continue rebase

最后将feature-C合并到master上

  1. $ git checkout master
  2. Switched to branch 'master'
  3. $ git merge feature-C
  4. Updating 217ecb7..2b82757
  5. Fast-forward
  6. README.md | 10 +++++++++-
  7. "\357\274\201" | 18 ++++++++++++++++++
  8. 2 files changed, 27 insertions(+), 1 deletion(-)
  9. create mode 100644 "\357\274\201"

将本地分支推送到远端分支上

git remote : 远程仓库操作

我们到github上找到 .git的ssh链接。我的是git@github.com:KanePD/Self-Document.git

  1. $ git remote add kane git@github.com:KanePD/Self-Document.git
  2. # 前面的kane是别名
  3. $ git remote -v # 查看本地的远程仓库都有什么
  4. $ git remote -v
  5. kane git@github.com:KanePD/Self-Document.git (fetch)
  6. kane git@github.com:KanePD/Self-Document.git (push)

git push: 推送到远端仓库

本地有了远端仓库之后,直接推送到远端仓库

  1. $ git push kane master#将我本地的代码推到远端的master上

下面推送一个新的分支

  1. # 如果远端没有这个分支,会在远端创建一个分支
  2. $ git checkout -b feature-D
  3. Switched to a new branch 'feature-D'
  4. $ git push kane feature-D
  5. Counting objects: 40, done.
  6. Delta compression using up to 4 threads.
  7. Compressing objects: 100% (25/25), done.
  8. Writing objects: 100% (40/40), 3.29 KiB | 54.00 KiB/s, done.
  9. Total 40 (delta 7), reused 0 (delta 0)
  10. remote: Resolving deltas: 100% (7/7), done.
  11. remote:
  12. remote: Create a pull request for 'feature-D' on GitHub by visiting:
  13. remote: https://github.com/KanePD/Self-Document/pull/new/feature-D
  14. remote:
  15. To github.com:KanePD/Self-Document.git
  16. * [new branch] feature-D -> feature-D
  17. # 由于我的本地master 与这个仓库的master不是一个东西,我没有真正的推master上去

远端的feature-D分支没有什么用,我们在本地删除它

  1. $ git push kane --delete feature-D
  2. To github.com:KanePD/Self-Document.git
  3. - [deleted] feature-D
  4. # 重新访问 github 远端的feature-D分支已经被删除了

从远程仓库获取

git clone :获取远程仓库

将远端的仓库的某个分支clone下来。

  1. $ git clone git@github.com:KanePD/Self-Document.git
  2. # git clone 后我们会默认处于master分支下,同事系统将会自动将origin 设置成远程仓库的标识。也就是说,当前本地仓库的 master 分支与 GitHub 端远程仓库(origin)的 master 分支在内容上是完全相同的
  3. # 如果我们想拉取别的分支
  4. # 我们首先查看远端的所有分支
  5. $ git branch -a
  6. * master
  7. remotes/origin/HEAD -> origin/master
  8. remotes/origin/master
  9. remotes/origin/test
  10. # 我们将远端的test分支拉取下来
  11. $ git checkout -b test origin/test
  12. Switched to a new branch 'test'
  13. Branch 'test' set up to track remote branch 'test' from 'origin'.
  14. # 我们再查看一下,test分支已经拉取下来
  15. $ git branch -a
  16. master
  17. * test
  18. remotes/origin/HEAD -> origin/master
  19. remotes/origin/master
  20. remotes/origin/test

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

  1. $ git pull origin test
  2. From github.com:KanePD/Self-Document
  3. * branch test -> FETCH_HEAD
  4. Already up to date.
  5. # 介绍一下 git pull --rebase
  6. # git pull 的操作是git fetch+git merge
  7. # git pull --rebase 的操作是 git fetch+git rebase
  8. # 如果在拉取的情况下有冲突,使用git pull的话 会创建一个合并的commit
  9. # 但是使用git pull --rebase之后就只是将自己的修改追加到远端的修改后面,不会创建新的commit

fork 别人的分支进行开发

我fork一个第三方插件,额外说明一下,这个插件是验证BGP数据的,很好用的噢。

  • 如下图,点击fork。点击后会等待一会儿。这个操作是将别人的仓库fork到我们自己的github上

  • 如下图,成功将刚才的仓库,fork到我们的github中

  • 我们将刚才fork的仓库,clone到本地

  1. $ git clone git@github.com:KanePD/rpki-validator.git
  • 拉取下来之后,在本地修改,推送到自己的远端的仓库里面去,
  • 有修改之后,我们新建pull request,将自己仓库的master分支,合并到开源项目的master分支上即可

一个IMBA的指令 gitk

最后分享两本书

Github入门与实践

链接:https://pan.baidu.com/s/1maL5BjtatcZLUPAV4QDzOQ

提取码:x1im

复制这段内容后打开百度网盘手机App,操作更方便哦

Pro Git

链接:https://pan.baidu.com/s/1U3elwcl483hJ7tMnq0EXBQ

提取码:u6x8

复制这段内容后打开百度网盘手机App,操作更方便哦

直接上图,可以清楚的看到每个节点,节点之间的关系等。

GIT初始学习记录的更多相关文章

  1. Git原理学习记录

    Git原理学习记录 1.git init git-test ​ git init 实际上就是在特定的目录下创建对应的目录和文件 2.object $ echo "V1" > ...

  2. git原理学习记录:从基本指令到背后原理,实现一个简单的git

    一开始我还担心 git 的原理会不会很难懂,但在阅读了官方文档后我发现其实并不难懂,似乎可以动手实现一个简单的 git,于是就有了下面这篇学习记录. 本文的叙述思路参照了官方文档Book的原理介绍部分 ...

  3. [git]git版本管理学习记录

    今天看到别人用这玩意记录自己的进度, 我也学习了一下. 1,适当的工具会提升效率 2,关注点还是得放在代码本身上. github/gitignore github提供了各种gitignore文件 有p ...

  4. 【Git】学习记录

    配置git git config --global user.name "用户名或者用户ID" git config --global user.email "邮箱&qu ...

  5. Git安装学习记录

    1.下载: https://gitforwindows.org/ 2.安装:https://blog.csdn.net/chengyuqiang/article/details/54178683 3. ...

  6. Git学习记录--git仓库

    Git是一款强大的版本控制工具,与svn相比git的分布式提交,本地仓库等在使用时确实比较方便.当然两者之间各有优劣,我在这里不多做比较.由于之前少有接触git,只是零星大致地了解一点,所以找时间系统 ...

  7. Git学习记录-基本命令篇

    目录 网页在线练习地址 https://learngitbranching.js.org/ 1.git commit Git 仓库中的提交记录保存的是你的目录下所有文件的快照,就像是把整个目录复制,然 ...

  8. Git学习记录 力做全网最强入门教程

    目录 Git学习记录 力做全网最强入门教程 什么是GitHub? 什么是Git? Git的配置 Git的安装(只介绍windos操作系统下) Git的配置 至此我们的入门教程到此结束,更新中级教程要等 ...

  9. Git 教程 -- 基于自己学习记录

    Git 教程 -- 基于自己学习记录 1. 引言 由于学校布置了一项熟悉 git 和 svn 操作的实验,所以自己重新温习了下 git,记录过程在这. 2. 注册登录 GitHub. 3. 选择一个仓 ...

随机推荐

  1. BZOJ4552 HEOI2016/TJOI2016排序(线段树合并+线段树分裂)

    很久以前写过二分答案离线的做法,比较好理解.事实上这还是一个线段树合并+分裂的板子题,相比离线做法以更优的复杂度做了更多的事情.具体不说了.怎么交了一遍luogu上就跑第一了啊 #include< ...

  2. Java基础 -- 访问控制权限

    一  包:库单元 假设我们存在两个类名相同的类,如果没有一定的措施对其进行区分,就会无法区别到底使用的是哪一个类.因此java引入了包来进行名字空间管理. 包(类库)包含有一组类,这些类在单一的名字空 ...

  3. Ubuntu18.04 安装32bit库后出现问题

    ERROR: ld.so: object 'libgtk3-nocsd.so.0' from LD_PRELOAD cannot be preloaded (cannot open shared ob ...

  4. matlab里面如何保留小数特定位数

    [转载]Matlab取整函数有: fix, floor, ceil, round.取整函数在编程时有很大用处. 一.取整函数 1.向零取整(截尾取整) fix-向零取整(Round towards z ...

  5. python之模块之shutil模块

    shutil -- --High-level file operations  高级的文件操作模块. os模块提供了对目录或者文件的新建/删除/查看文件属性,还提供了对文件以及目录的路径操作.比如说: ...

  6. Numpy 系列(八)- 广播机制

    什么是广播 我们都知道,Numpy中的基本运算(加.减.乘.除.求余等等)都是元素级别的,但是这仅仅局限于两个数组的形状相同的情况下. 可是大家又会发现,如果让一个数组加1的话,结果时整个数组的结果都 ...

  7. 轴对称 Navier-Stokes 方程组的点态正则性准则 I

    在 [Lei, Zhen; Zhang, Qi. Criticality of the axially symmetric Navier-Stokes equations. Pacific J. Ma ...

  8. H5取经之路——随便写点儿

    [相对定位] * 1.使用position:relative:设置元素为相对定位的元素: * 2.定位机制: ①相对于自己原来文档流中的的位置定位,当不指定top等定位值时,不会改变元素位置: ②相对 ...

  9. luogu P5301 [GXOI/GZOI2019]宝牌一大堆

    传送门 wdnm又是打麻将 首先国土无双可以直接枚举哪种牌用了\(2\)次算贡献,然后\(7\)个对子可以把每种牌的对子贡献排序,取最大的\(7\)个,剩下的牌直接暴力枚举是不行的,考虑dp,设\(f ...

  10. C#多态及接口

    直接看代码吧 using System; using static System.Console; namespace ConsoleApp { //使用abstract,抽象类或方法,不能使用vir ...