Git和Github入门
推文:官方手册,十分详细
一.git使用
1.git安装
(1)windows
网站:https://git-scm.com/download/win下载安装即可
(2)linux安装
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel 安装依赖环境 Ubuntu18.04直接安装git即可,不需要我们设置依赖环境
yum install git
2.版本库创建
(1)创建项目目录
mkdir git_test
cd git_test
(2)版本库创建
$ git init
Initialized empty Git repository in D:/MyPython/day26/git_test/.git/
#创建了一个空的git仓库在当前目录下的隐藏目录.git下
(3)创建一个文件,将文件添加到版本库
.vim my_first_git_program.txt #创建文件,向其中写入一些数据
2.$ git status #查看当前工作区状态
On branch master No commits yet Untracked files:
(use "git add <file>..." to include in what will be committed) my_first_git_program.txt #文件被修改,我们应该去进行添加 nothing added to commit but untracked files present (use "git add" to track)
.git add my_first_git_program.txt #将当前文件添加到暂存区
.git commit -m "fitst commit my_first_git_program.txt" #将当前暂存区中的数据全部放入仓库,必须提供注解
.在commit数据时,有可能是需要我们填写提交人的邮箱和姓名,有时是默认的
我们可以使用:
git config --global user.email 6257@qq.com
git config --global user.name ld
去配置全局信息
补充:
git commit -m与-am的区别
git commit -m用于提交暂存区的文件,
git commit -am用于提交跟踪过的文件
补充:
3.代码回滚
(1)对于我们修改后的文件,只要还在工作区。我们都可以直接使用git checkout -- 文件名,将数据还原。就是让这个文件回到最近一次git commit
或git add
时的状态
补充:
对于添加到暂存区的代码,不能使用checkout撤销,checkout只是针对工作区的代码
(2)对于我们要去回滚暂存区的数据,我们可以使用reset
$ git reset HEAD readme #将数据从暂存区,回滚到工作区
Unstaged changes after reset:
M readme
补充:HEAD
HEAD是一个指针,指向master分支的最新版本号
注意:HEAD指向当前最新的版本号,HEAD^是代表上一个版本号,^^代表上上个版本,以此类推
(3)对于commit提交的数据,我们可以使用reset --hard HEAD^回到上一个版本,或者使用reset --hard 版本号(部分,6位及以上)回到指定的版本号
使用git log --pretty=oneline查看当前版本库的状态
使用git reflog可以查看每一次添加和回滚操作的记录日志,含有版本号和注解。方便我们回到某一版本
演示:
4.删除操作
(1)直接删除文件,在暂存区中状态会改变,可以使用checkout -- file撤回
rm -rf 文件名 #强制删除文件
git checkout -- 文件 #可以直接恢复删除的文件
(2)使用rm直接删除文件后,确实要删除该文件,使用命令git rm删除,在commit,可以通过版本号回滚
二.github远程仓库管理
1.创建远程仓库
2.本地仓库和远程仓库关联
(1)将刚刚创建的仓库,克隆到本地使用
1>将远程仓库克隆岛本地
$ git clone https://github.com/viewmountain/github_operate.git
Cloning into 'github_operate'...
warning: You appear to have cloned an empty repository.
2>在本地操作代码
3>上传到远程仓库
git push -u origin master #需要输入用户名密码
4>上传成功
注意:
1.可能会出现403错误
我们需要去修改配置文件:
2.可能出现Gtk警告
我们需要使用
unset SSH_ASKPASS
(2)先有本地仓库,再创建了一个空的远程仓库,想要上传到远程仓库上去
1.本地已存在仓库
2.创建一个远程空仓库
3.将本地仓库和远程仓库关联
git remote add origin https://github.com/viewmountain/local_to_remote.git
git push -u origin master
3.上面使用的是HTTPS方式关联,下面使用SSH方式
(1)生成公钥私钥
linux:linux下请看
window:在git bash中使用
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/Administrator/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/Administrator/.ssh/id_rsa.
Your public key has been saved in /c/Users/Administrator/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Vz2QZuY+oDKXwL81BtlQrL/XLkfG3Hp7bl9fzCnJ6sQ Administrator@MS-20170531RBBW
The key's randomart image is:
+---[RSA ]----+
| o. .. |
| . . =o |
| . = =. o |
| o + o.. . |
| oS=.o o . |
| o =.* + *oo|
| + + E O o=|
| . o + = B|
| .+ +.=B|
+----[SHA256]-----+
(2)将公钥上传到github上
1>对某个项目使用ssh操作
2>对所有仓库都可以使用SSH管理
(3)使用ssh远程操作仓库
1>使用远程将项目获取
2>修改项目,操作本地仓库,将本地仓库上传到远程
$ git push origin master
三:git分支管理
1.git分支合并,示意图
2.创建分支
$ git checkout -b dev #创建dev分支,会自动切换到dev分支
Switched to a new branch 'dev' Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (dev)
3.查看分支
$ git branch
* dev #带星号,是表示位于当前分支
master Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (dev)
4.分支切换
$ git checkout master
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'. 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下修改文件
$ vim readme #修改文件 $ cat readme
hhhhh
test
dawf
change on master $ git add readme #存放到暂存区 Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (master)
$ git commit -m "change on master" #提交到仓库中
[master 09dbb59] change on master
file changed, insertion(+) Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (master)
6.切换分支dev,查看文件内容
$ git checkout dev
Switched to branch 'dev' Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (dev)
$ cat readme
hhhhh
test
dawf Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (dev)
7.发现可以实现master和dev两个分支相互平行,不干扰
四.分支融合merge
1.git pull更新当前分支到最新版本(更新主分支)
$ git pull
Already up-to-date. Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (master)
2.在本地主分支上,融合开发的分支dev
$ git merge dev #下面显示自动融合出现矛盾,因为我们我们在dev分支修改了readme,在最新的主分支上也修改过readme,冲突了
Auto-merging readme
CONFLICT (content): Merge conflict in readme
Automatic merge failed; fix conflicts and then commit the result. Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (master|MERGING)
解决方法:
1.vim编辑手工筛选
2.选择更好工具:beyond compare等
3.在本地融合,处理完冲突后,上传主分支到远程
$ vim readme Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (master|MERGING)
$ git add readme Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (master|MERGING)
$ git commit -m "conflict solve"
[master a69bed3] conflict solve Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (master)
$ git merge dev #本地融合完成
Already up-to-date. Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (master)
$ git push origin master #向远程上传更新
Counting objects: , done.
Delta compression using up to threads.
Compressing objects: % (/), done.
Writing objects: % (/), bytes | 112.00 KiB/s, done.
Total (delta ), reused (delta )
remote: Resolving deltas: % (/), completed with local object.
To github.com:viewmountain/local_to_remote.git
606b1b0..a69bed3 master -> master
4.注意:可能在我们使用git pull更新主分支时,会报错
原因是因为,我们手中的是原来老版本主分支,
我们在开发dev时,
其他人员开发其他应用时可能会去修改主分支中的代码,而且有可能会修改到我们原来老版本部分的代码。
这时我们手中部分老版本代码会出现冲突。这时就需要我们再手动去修改冲突文件(根据提示)
补充:远程其他分支操作(毕竟多人操作,需要共用一个分支,而这个分支不可能是master主分支,例如dev,bug)
1>查看远程仓库分支
$ git remote
origin Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (dev)
$ git remote -v
origin git@github.com:viewmountain/local_to_remote.git (fetch)
origin git@github.com:viewmountain/local_to_remote.git (push) Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (dev)
注意:远程主分支是origin,而git自动把本地的master分支和远程的master分支对应
2>推送分支dev
$ git push origin dev #将dev分支推送到远程
Counting objects: , done.
Delta compression using up to threads.
Compressing objects: % (/), done.
Writing objects: % (/), bytes | 133.00 KiB/s, done.
Total (delta ), reused (delta )
remote: Resolving deltas: % (/), completed with local object.
To github.com:viewmountain/local_to_remote.git
f39dc34..3101afb dev -> dev Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (master)
推送分支原则:
master分支是主分支,因此要时刻与远程同步; dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步; bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug; feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。 其他的,放在本地自己看
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
$ git stash #将当前分支工作区存储下来。
Saved working directory and index state WIP on dev: e0fcdc2 dev a app with a bug Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (dev)
(2)回到本地主分支,在其基础上创建一个bug分支
$ git checkout master #回到主分支
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'. Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (master) $ git checkout -b bug-101 #在其基础上创建一个bug分支,去处理bug
Switched to a new branch 'bug-101' Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (bug-)
(3)在bug-101分支处理bug
(4)回到主分支,更新当前主分支代码。然后将bug分支代码融合
(5)上传更新远程主分支代码
$ git push origin master
Counting objects: , done.
Delta compression using up to threads.
Compressing objects: % (/), done.
Writing objects: % (/), bytes | 128.00 KiB/s, done.
Total (delta ), reused (delta )
remote: Resolving deltas: % (/), completed with local objects.
To github.com:viewmountain/local_to_remote.git
2eb94d5..64a31b3 master -> master Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (master)
(6)回到dev分支,恢复工作区状态
$ git checkout dev #回到dev分支
Switched to branch 'dev' Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (dev)
$ git stash list #查看临时保存的列表
stash@{}: WIP on dev: e0fcdc2 dev a app with a bug Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (dev)
$ git stash apply #恢复之前保存的临时工作
On branch dev
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory) modified: my_first_git_program.txt no changes added to commit (use "git add" and/or "git commit -a") Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (dev)
$ git stash drop #上传当前临时保存的列表
Dropped refs/stash@{} (97e9105ea76ab63334eae953fae20f2f6c074185) Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (dev)
$ git stash list Administrator@MS-20170531RBBW MINGW64 /d/MyPython/day26/git_test3/github_ssh/local_to_remote (dev)
补充:
git stash pop 恢复并删除临时保存的备份
六:忽略特殊文件.gitignore(工作区)
对于某些特殊,敏感的文件,不希望提交上去
忽略操作系统自动生成的文件,比如缩略图等; 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件; 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
具体语言的相关配置:https://github.com/github/gitignore
我们只需要将要忽略的文件添加到.gitignore中即可
注意:
对于已经提交过的文件,不会去维护,我们需要先删除这个文件,再提交的时候才会被忽略
Git和Github入门的更多相关文章
- git和github入门指南(6)
6.交作业的流程 以下内容是螺钉课堂在线就业班提交作业的要求,非螺钉课堂在线就业班学员不用学习 螺钉课堂作业全程采用git管理,希望在日常使用中,加深对git和github的理解 具体流程: 1.注册 ...
- git和github入门指南(1)
1.git和github简介 1.1.git是什么?github是什么?git和github的关系? Git是一个开源的分布式版本控制系统,可以有效.高速地处理从很小到非常大的项目版本管理. Git ...
- Git与GitHub入门
一.git起步https://www.runoob.com/git/git-install-setup.html1.下载git(Windows)2.安装GUI(TortoiseGit)3.查看git配 ...
- Git及Github入门笔记
简介 Git是一个分布式版本控制系统(你可以通过Git来管理你的代码以及相关文档,可以在自己电脑上管理,同时也可以和同事协同使用管理),Github为Git提供一个服务器(简单的说,就是你可以把你的代 ...
- window下Git和github入门
tip:使用简单的例子来制作一个使用指南过程,默认文件夹为demo.看了3个早晨,写一下留个记录,可能有些不成熟,如有错误欢迎指正. 参考一:http://www.liaoxuefeng.com/wi ...
- Git和Github入门教程
一.常用命令 所有命令前都要加 git,如表中的init是指 git init.点击命令可直接跳转至本文第一次使用的地方.以下命令都在命令行里执行. 1.本地命令 行为 命令 备注 初始化 init ...
- 【Git】Git与GitHub 入门
GitHub GitHub是一个基于git的代码托管平台,付费用户可以建私人仓库,我们一般的免费用户只能使用公共仓库,也就是代码要公开. 对于一般人来说公共仓库就已经足够了,而且我们也没多少代码来管理 ...
- Git和GitHub入门基础
-----------------------------------------//cd F:/learngit // 创建仓库git init // 在当前目录下创建空的git仓库------- ...
- 【Git】Git与GitHub 入门【转】
转自:http://www.cnblogs.com/lcw/p/3394545.html GitHub GitHub是一个基于git的代码托管平台,付费用户可以建私人仓库,我们一般的免费用户只能使用公 ...
随机推荐
- python learning Network Programming.py
Socket # 用一个 Socke t表示"打开了一个网络连接" # 打开一个 Socket 需要知道目标计算机的IP地址和端口号,再指定协议类型即可. # TCP # 主动发起 ...
- python learning Exception & Debug.py
''' 在程序运行的过程中,如果发生了错误,可以事先约定返回一个错误代码,这样,就可以知道是否有错,以及出错的原因.在操作系统提供的调用中,返回错误码非常常见.比如打开文件的函数open(),成功时返 ...
- 程序开发入门工具之CodeBlocks
程序开发基础工具之CodeBlocks 作为程序开发工作者,我们会接触很多的程序开发软件:但实用以及容易掌握的程序开发软件对于初学者的学习能力是有一定的加成的.今天我就作为一个程序开发者给大家推荐一个 ...
- 树莓派与Arduino Leonardo使用NRF24L01无线模块通信之基于RF24库 (一) 配置与测试
引脚连接说明 与树莓派的连线 NRF24L01 => 树莓派 GND => GND VCC => 3.3V CE = ...
- Maven解读:强大的依赖体系
Github地址:https://github.com/zwjlpeng/Maven_Detail Maven最大的好处就是能够很方便的管理项目对第三方Jar包的依赖,只需在Pom文件中添加几行配置文 ...
- 使用fdisk创建好了分区,但是在生成物理卷出现"Device /dev/sdb2 not found (or ignored by filtering)."解决方法
生成物理卷出现的问题 解决方法 问题所在: 内核没有成功同步分区信息,所有才需要使用"partprobe"命令来手动同步
- 个人作业-week3案例分析
第一部分 软件调研测评(必应词典移动端) 找到的bug: 在词汇量测试中每个单词给用户思考的时间太短,只有五秒钟.导致很多似曾相识的单词还没来得及想起就已经过了.如果说测的是用户记忆深刻的单词,那些记 ...
- 『编程题全队』Alpha 阶段冲刺博客Day1
『编程题全队』Alpha 阶段冲刺博客Day1 一.Alpha 阶段全组总任务 二.各个成员在 Alpha 阶段认领的任务 三.明日各个成员的任务安排 孙志威:实现基本的网络连接, 完成燃尽图模块 孙 ...
- javascript易混淆的split()、splice()、slice()方法详解
很多时候,一门语言总有那么些相似的方法,容易让人傻傻分不清楚,尤其在不经常用的时候.而本文主要简单总结了JavaScript中的关于字符串和数组中三个容易混淆的方法.旨在方便查阅,在容易混淆的时候有据 ...
- jenkins 通过maven部署Tomcat8报错
问题过程 jenkins执行构建过程中,可以在workspace/项目名/target/目录下产生xxx.jar文件 但是在执行构建后操作时报出如下错误 [INFO] ---------------- ...