推文:官方手册,十分详细

推文:git和github快速入门

一.git使用

1.git安装

(1)windows

网站:https://git-scm.com/download/win下载安装即可

(2)linux安装

  1. yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel  安装依赖环境 Ubuntu18.04直接安装git即可,不需要我们设置依赖环境
  1. yum install git

2.版本库创建

(1)创建项目目录

  1. mkdir git_test
    cd git_test

(2)版本库创建

  1. $ git init
  2. Initialized empty Git repository in D:/MyPython/day26/git_test/.git/
    #创建了一个空的git仓库在当前目录下的隐藏目录.git下

(3)创建一个文件,将文件添加到版本库

  1. .vim my_first_git_program.txt #创建文件,向其中写入一些数据
  1. 2.$ git status  #查看当前工作区状态
  2. On branch master
  3.  
  4. No commits yet
  5.  
  6. Untracked files:
  7. (use "git add <file>..." to include in what will be committed)
  8.  
  9. my_first_git_program.txt  #文件被修改,我们应该去进行添加
  10.  
  11. nothing added to commit but untracked files present (use "git add" to track)
  1. .git add my_first_git_program.txt  #将当前文件添加到暂存区
  1. .git commit -m "fitst commit my_first_git_program.txt"  #将当前暂存区中的数据全部放入仓库,必须提供注解
  1. .在commit数据时,有可能是需要我们填写提交人的邮箱和姓名,有时是默认的
  2. 我们可以使用:
  3. git config --global user.email 6257@qq.com
  4. git config --global user.name ld
  5. 去配置全局信息

补充:

git commit -m与-am的区别

  1. git commit -m用于提交暂存区的文件,
    git commit -am用于提交跟踪过的文件

补充:

3.代码回滚

(1)对于我们修改后的文件,只要还在工作区。我们都可以直接使用git checkout -- 文件名,将数据还原。就是让这个文件回到最近一次git commitgit add时的状态

补充:

  1. 对于添加到暂存区的代码,不能使用checkout撤销,checkout只是针对工作区的代码

(2)对于我们要去回滚暂存区的数据,我们可以使用reset

  1. $ git reset HEAD readme  #将数据从暂存区,回滚到工作区
  2. Unstaged changes after reset:
  3. M readme

补充:HEAD

HEAD是一个指针,指向master分支的最新版本号

注意:HEAD指向当前最新的版本号,HEAD^是代表上一个版本号,^^代表上上个版本,以此类推

(3)对于commit提交的数据,我们可以使用reset --hard HEAD^回到上一个版本,或者使用reset --hard 版本号(部分,6位及以上)回到指定的版本号

  1. 使用git log --pretty=oneline查看当前版本库的状态

  1. 使用git reflog可以查看每一次添加和回滚操作的记录日志,含有版本号和注解。方便我们回到某一版本

演示:

4.删除操作

(1)直接删除文件,在暂存区中状态会改变,可以使用checkout -- file撤回

  1. rm -rf 文件名 #强制删除文件

  1. git checkout -- 文件 #可以直接恢复删除的文件

(2)使用rm直接删除文件后,确实要删除该文件,使用命令git rm删除,在commit,可以通过版本号回滚

二.github远程仓库管理

1.创建远程仓库

2.本地仓库和远程仓库关联

(1)将刚刚创建的仓库,克隆到本地使用

1>将远程仓库克隆岛本地

  1. $ git clone https://github.com/viewmountain/github_operate.git
  2. Cloning into 'github_operate'...
  3. warning: You appear to have cloned an empty repository.

2>在本地操作代码

3>上传到远程仓库

  1. git push -u origin master  #需要输入用户名密码

4>上传成功

 注意:

1.可能会出现403错误

我们需要去修改配置文件:

2.可能出现Gtk警告

我们需要使用

  1. unset SSH_ASKPASS

(2)先有本地仓库,再创建了一个空的远程仓库,想要上传到远程仓库上去

1.本地已存在仓库

2.创建一个远程空仓库

3.将本地仓库和远程仓库关联

  1. git remote add origin https://github.com/viewmountain/local_to_remote.git
  2. git push -u origin master

3.上面使用的是HTTPS方式关联,下面使用SSH方式

(1)生成公钥私钥

linux:linux下请看

window:在git bash中使用

  1. $ ssh-keygen
  2. Generating public/private rsa key pair.
  3. Enter file in which to save the key (/c/Users/Administrator/.ssh/id_rsa):
  4. Enter passphrase (empty for no passphrase):
  5. Enter same passphrase again:
  6. Your identification has been saved in /c/Users/Administrator/.ssh/id_rsa.
  7. Your public key has been saved in /c/Users/Administrator/.ssh/id_rsa.pub.
  8. The key fingerprint is:
  9. SHA256:Vz2QZuY+oDKXwL81BtlQrL/XLkfG3Hp7bl9fzCnJ6sQ Administrator@MS-20170531RBBW
  10. The key's randomart image is:
  11. +---[RSA ]----+
  12. | o. .. |
  13. | . . =o |
  14. | . = =. o |
  15. | o + o.. . |
  16. | oS=.o o . |
  17. | o =.* + *oo|
  18. | + + E O o=|
  19. | . o + = B|
  20. | .+ +.=B|
  21. +----[SHA256]-----+

(2)将公钥上传到github上

1>对某个项目使用ssh操作

2>对所有仓库都可以使用SSH管理

(3)使用ssh远程操作仓库

1>使用远程将项目获取

2>修改项目,操作本地仓库,将本地仓库上传到远程

  1. $ git push origin master

三:git分支管理

1.git分支合并,示意图

2.创建分支

  1. $ git checkout -b dev  #创建dev分支,会自动切换到dev分支
  2. Switched to a new branch 'dev'
  3.  
  4. Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (dev)

3.查看分支

  1. $ git branch
  2. * dev  #带星号,是表示位于当前分支
  3. master
  4.  
  5. Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (dev)

4.分支切换

  1. $ git checkout master
  2. Switched to branch 'master'
  3. Your branch is up-to-date with 'origin/master'.
  4.  
  5. Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (master)

$ git branch
dev
* master

Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (master)

5.在主分支master下修改文件

  1. $ vim readme  #修改文件
  2.  
  3. $ cat readme
  4. hhhhh
  5. test
  6. dawf
  7. change on master
  8.  
  9. $ git add readme  #存放到暂存区
  10.  
  11. Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (master)
  12. $ git commit -m "change on master"  #提交到仓库中
  13. [master 09dbb59] change on master
  14. file changed, insertion(+)
  15.  
  16. Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (master)

6.切换分支dev,查看文件内容

  1. $ git checkout dev
  2. Switched to branch 'dev'
  3.  
  4. Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (dev)
  5. $ cat readme
  6. hhhhh
  7. test
  8. dawf
  9.  
  10. Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (dev)

7.发现可以实现master和dev两个分支相互平行,不干扰

四.分支融合merge

1.git pull更新当前分支到最新版本(更新主分支)

  1. $ git pull
  2. Already up-to-date.
  3.  
  4. Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (master)

2.在本地主分支上,融合开发的分支dev

  1. $ git merge dev  #下面显示自动融合出现矛盾,因为我们我们在dev分支修改了readme,在最新的主分支上也修改过readme,冲突了
  2. Auto-merging readme
  3. CONFLICT (content): Merge conflict in readme
  4. Automatic merge failed; fix conflicts and then commit the result.
  5.  
  6. Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (master|MERGING)

解决方法:

1.vim编辑手工筛选

2.选择更好工具:beyond compare等

3.在本地融合,处理完冲突后,上传主分支到远程

  1. $ vim readme
  2.  
  3. Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (master|MERGING)
  4. $ git add readme
  5.  
  6. Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (master|MERGING)
  7. $ git commit -m "conflict solve"
  8. [master a69bed3] conflict solve
  9.  
  10. Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (master)
  11. $ git merge dev  #本地融合完成
  12. Already up-to-date.
  13.  
  14. Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (master)
  15. $ git push origin master  #向远程上传更新
  16. Counting objects: , done.
  17. Delta compression using up to threads.
  18. Compressing objects: % (/), done.
  19. Writing objects: % (/), bytes | 112.00 KiB/s, done.
  20. Total (delta ), reused (delta )
  21. remote: Resolving deltas: % (/), completed with local object.
  22. To github.com:viewmountain/local_to_remote.git
  23. 606b1b0..a69bed3 master -> master

4.注意:可能在我们使用git pull更新主分支时,会报错

  1. 原因是因为,我们手中的是原来老版本主分支,
    我们在开发dev时,
    其他人员开发其他应用时可能会去修改主分支中的代码,而且有可能会修改到我们原来老版本部分的代码。
    这时我们手中部分老版本代码会出现冲突。这时就需要我们再手动去修改冲突文件(根据提示)

补充:远程其他分支操作(毕竟多人操作,需要共用一个分支,而这个分支不可能是master主分支,例如dev,bug)

1>查看远程仓库分支

  1. $ git remote
  2. origin
  3.  
  4. Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (dev)
  5. $ git remote -v
  6. origin git@github.com:viewmountain/local_to_remote.git (fetch)
  7. origin git@github.com:viewmountain/local_to_remote.git (push)
  8.  
  9. Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (dev)

注意:远程主分支是origin,而git自动把本地的master分支和远程的master分支对应

2>推送分支dev

  1. $ git push origin dev  #将dev分支推送到远程
  2. Counting objects: , done.
  3. Delta compression using up to threads.
  4. Compressing objects: % (/), done.
  5. Writing objects: % (/), bytes | 133.00 KiB/s, done.
  6. Total (delta ), reused (delta )
  7. remote: Resolving deltas: % (/), completed with local object.
  8. To github.com:viewmountain/local_to_remote.git
  9. f39dc34..3101afb dev -> dev
  10.  
  11. Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (master)

推送分支原则:

  1. master分支是主分支,因此要时刻与远程同步;
  2.  
  3. dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
  4.  
  5. bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug
  6.  
  7. feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
  8.  
  9. 其他的,放在本地自己看

3>抓取分支

空项目,git克隆远程库后,默认,只能看到master主分支

$ git branch
* master

Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test (master)

想要获取其他分支

$ git branch
* master

Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test (master)
$ git checkout -b dev origin/dev
Switched to a new branch 'dev'
Branch dev set up to track remote branch dev from origin.

Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test (dev)
$ git branch
* dev
master

Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test (dev)

五.bug分支

前景:

当前正在dev分支开发一个项目,开发了大部分。发现之前上传的主分支版本出现bug,错误码101(是属于我们开发的代码),需要紧急修复。

分析:

1.我们需要保存现在dev分支的状态  git stash

2.因为bug出现在上一个我们开发的master分支上,所以我们只需要针对本地的master主分支去生成一个bug分支。将bug修复后,在与远程仓库融合提交。

3.bug修复后,回到开发分支,恢复原来状态  git stash apply

1.前景实现

(1)开发了一个应用,含有bug

(2)其他人员也正常开发其他应用。对主分支进行了更新

注意:

我们本地的版本是原始的出现bug的那一个版本,所以我们只需要去修改本地出现bug的那个本地master主分支代码,之后与远程主分支融合

(3)我们正在开发一个新的应用,在dev分支上

2.场景处理:被告知我们开发的上一个项目有bug,需要紧急处理

(1)当前分支没有被完成,而且不想现在add,commit

  1. $ git stash  #将当前分支工作区存储下来。
  2. Saved working directory and index state WIP on dev: e0fcdc2 dev a app with a bug
  3.  
  4. Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (dev)

(2)回到本地主分支,在其基础上创建一个bug分支

  1. $ git checkout master  #回到主分支
  2. Switched to branch 'master'
  3. Your branch is up-to-date with 'origin/master'.
  4.  
  5. Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (master)
  6.  
  7. $ git checkout -b bug-101  #在其基础上创建一个bug分支,去处理bug
  8. Switched to a new branch 'bug-101'
  9.  
  10. Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (bug-)

(3)在bug-101分支处理bug

(4)回到主分支,更新当前主分支代码。然后将bug分支代码融合

(5)上传更新远程主分支代码

  1. $ git push origin master
  2. Counting objects: , done.
  3. Delta compression using up to threads.
  4. Compressing objects: % (/), done.
  5. Writing objects: % (/), bytes | 128.00 KiB/s, done.
  6. Total (delta ), reused (delta )
  7. remote: Resolving deltas: % (/), completed with local objects.
  8. To github.com:viewmountain/local_to_remote.git
  9. 2eb94d5..64a31b3 master -> master
  10.  
  11. Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (master)

(6)回到dev分支,恢复工作区状态

  1. $ git checkout dev  #回到dev分支
  2. Switched to branch 'dev'
  3.  
  4. Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (dev)
  5. $ git stash list  #查看临时保存的列表
  6. stash@{}: WIP on dev: e0fcdc2 dev a app with a bug
  7.  
  8. Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (dev)
  9. $ git stash apply  #恢复之前保存的临时工作
  10. On branch dev
  11. Changes not staged for commit:
  12. (use "git add <file>..." to update what will be committed)
  13. (use "git checkout -- <file>..." to discard changes in working directory)
  14.  
  15. modified: my_first_git_program.txt
  16.  
  17. no changes added to commit (use "git add" and/or "git commit -a")
  18.  
  19. Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (dev)
  20. $ git stash drop  #上传当前临时保存的列表
  21. Dropped refs/stash@{} (97e9105ea76ab63334eae953fae20f2f6c074185)
  22.  
  23. Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (dev)
  24. $ git stash list
  25.  
  26. Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (dev)

补充:

  1. git stash pop 恢复并删除临时保存的备份

六:忽略特殊文件.gitignore(工作区)

对于某些特殊,敏感的文件,不希望提交上去

忽略操作系统自动生成的文件,比如缩略图等; 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件; 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。

具体语言的相关配置:https://github.com/github/gitignore

我们只需要将要忽略的文件添加到.gitignore中即可

注意:

  1. 对于已经提交过的文件,不会去维护,我们需要先删除这个文件,再提交的时候才会被忽略

Git和Github入门的更多相关文章

  1. git和github入门指南(6)

    6.交作业的流程 以下内容是螺钉课堂在线就业班提交作业的要求,非螺钉课堂在线就业班学员不用学习 螺钉课堂作业全程采用git管理,希望在日常使用中,加深对git和github的理解 具体流程: 1.注册 ...

  2. git和github入门指南(1)

    1.git和github简介 1.1.git是什么?github是什么?git和github的关系? Git是一个开源的分布式版本控制系统,可以有效.高速地处理从很小到非常大的项目版本管理. Git ...

  3. Git与GitHub入门

    一.git起步https://www.runoob.com/git/git-install-setup.html1.下载git(Windows)2.安装GUI(TortoiseGit)3.查看git配 ...

  4. Git及Github入门笔记

    简介 Git是一个分布式版本控制系统(你可以通过Git来管理你的代码以及相关文档,可以在自己电脑上管理,同时也可以和同事协同使用管理),Github为Git提供一个服务器(简单的说,就是你可以把你的代 ...

  5. window下Git和github入门

    tip:使用简单的例子来制作一个使用指南过程,默认文件夹为demo.看了3个早晨,写一下留个记录,可能有些不成熟,如有错误欢迎指正. 参考一:http://www.liaoxuefeng.com/wi ...

  6. Git和Github入门教程

    一.常用命令 所有命令前都要加 git,如表中的init是指 git init.点击命令可直接跳转至本文第一次使用的地方.以下命令都在命令行里执行. 1.本地命令 行为 命令 备注 初始化 init ...

  7. 【Git】Git与GitHub 入门

    GitHub GitHub是一个基于git的代码托管平台,付费用户可以建私人仓库,我们一般的免费用户只能使用公共仓库,也就是代码要公开. 对于一般人来说公共仓库就已经足够了,而且我们也没多少代码来管理 ...

  8. Git和GitHub入门基础

    -----------------------------------------//cd F:/learngit // 创建仓库git init  // 在当前目录下创建空的git仓库------- ...

  9. 【Git】Git与GitHub 入门【转】

    转自:http://www.cnblogs.com/lcw/p/3394545.html GitHub GitHub是一个基于git的代码托管平台,付费用户可以建私人仓库,我们一般的免费用户只能使用公 ...

随机推荐

  1. 20162327WJH第一次实验——线性结构

    20162327WJH第一次实验--线性结构 实 验 报 告 实 验 报 告 课程:程序设计与数据结构 班级: 1623 姓名: 王旌含 学号:20162327 成绩: 2分 指导教师:娄嘉鹏 王志强 ...

  2. java BufferedWriter写数据不完全

    package com.brucekun.keyword; import java.io.BufferedReader; import java.io.BufferedWriter; import j ...

  3. HDU 1565 方格取数(1) 轮廓线dp

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1565 方格取数(1) Time Limit: 10000/5000 MS (Java/Others) ...

  4. 四则运算截图and代码

    1.运行截图 2.代码 #include<stdio.h> #include<stdlib.h> int main() { int i=300; int a=0; while( ...

  5. asp.net简述WP开发模式

    详情请参考菜鸟教程:http://www.runoob.com/aspnet/aspnet-tutorial.html 1.ASP.NET 是一个使用 HTML.CSS.JavaScript 和服务器 ...

  6. 'java' 不是内部或外部命令,也不是可运行的程序的两个解决办法

    第一个原因: 是环境变量path没有配置好,做如下图配置     第二个原因:   如果java环境有一段时间没有启动,再启动的时候提示这个,解决办法是进入path环境配置,如上图中界面,将JAVA_ ...

  7. pygame学习笔记(3)——时间、事件、文字

    转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 1.运动速率    上节中,实现了一辆汽车在马路上由下到上行驶,并使用了pygame.time.delay(200 ...

  8. [转帖]一文读懂 HTTP/2

    一文读懂 HTTP/2 http://support.upyun.com/hc/kb/article/1048799/ 又小拍 • 发表于:2017年05月18日 15:34:45 • 更新于:201 ...

  9. param 是获取请求传递过来的参数

  10. cmake 常用变量和常用环境变量查表手册

    cmake 常用变量和常用环境变量查表手册 一,cmake 变量引用的方式: 前面我们已经提到了,使用${}进行变量的引用.在 IF 等语句中,是直接使用变量名而不通过${}取值 二,cmake 自定 ...