使用 github 做代码管理,知道这些就够了
只要掌握了下面的常用命令,基本上用使用 github 就没有问题。github 有两种认证方式,一种是通过 ssh 私钥的方式,一种通过 https 的账号名和密码。ssh 方式需要创建本地秘钥并且添加到个github 上,操作起来略显麻烦,本篇完全介绍以 https 方式管理。
主要原理说明
git 的管理依赖于在你本地仓库的目录中存在一个 .git 目录的,里面有 config、HEAD 等文件。
HEAD 里面是标识当前所在的分支,内容如下,表示当前在 dev 分支下,之后的拉取和推送都是在 dev 分支下完成:
ref: refs/heads/dev
config 里配置一些参数,如仓库地址、remote 等
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[remote "origin"]
url = https://username:password@github.com/huzhicheng/test__11.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
其中,url 参数是重点,表示远程仓库地址,正常的远程仓库格式为 https://github.com/huzhicheng/test__11.git,而这里,并且包括下面用到的都是 https://username:password@github.com/huzhicheng/test__11.git 这种格式。其中username 表示 github 账号,后面冒号分隔,接一个密码,也就是 github 密码,然后用 @ 符号连接上远程仓库。
用 https 方式连接 github 项目就是这么简单。
##初始化本地仓库
假设我们要在 github 上维护一个项目。首先,要登录 github 账号,点击 “New repository”,输入项目名称,即可成功创建项目仓库,之后会提示如下内容:
echo "# 初始化仓库" >> README.md
git init
git add README.md
git commit -m "first commit"
做上面这些操作之前,我们需要在机器上创建一个空白目录,然后进入这个目录进行操作。
第一行,是说新建一个 README.md 文件,并且写上你自定义的内容;
第二行,通过 git init 命令做本地仓库的初始化;
第三行,将 README.md 添加到暂存区;
第四行,提交暂存区并写好注释说明。
本地仓库和远程仓库创建联系
本地创建完仓库后,需要把本地仓库和远程仓库建立联系,这样之后才能推送文件到远程仓库。
git remote add origin https://username:password@github.com/huzhicheng/test__11.git
移除本地仓库和远程仓库的关联
如果远程仓库作废或者添加了错误的远程仓库地址,可以用下面的命令移除掉。注意 origin 后面的内容需要和关联远程仓库时填写的内容一致才可以。
git remote rm origin https://username:password@github.com/huzhicheng/test__11.git
首次提交
git push -u origin master
推送本地修改到远程
推送前一定要先拉取最新代码,并且每次修改前及时拉取最新代码是非常好的习惯。
//拉取最新代码
git pull origin master
//查看本地仓库状态
git status
// 将所有修改更新至暂存区
git add .
// 提交暂存区更改 并写上明确的注释说明
git commit -m "注释内容"
// 提交修改至主分支
git push origin master
以上操作就可以完成从仓库初始化到文件提交的完整过程了。
那如果是参与已经存在的项目呢,远程仓库已经存在并且已有项目文件在了,下面介绍如何参与已有项目。
将远程仓库同步到本地
首先需要 clone 远程仓库到本地,然后拉取新代码就可以了,就是这么简单。
git clone https://username:password@github.com/username/xxxxxx.git
git remote -v 可以查看远程仓库版本
git fetch origin master 拉取远程仓库更新
强制覆盖本地文件
有时候临时在本地仓库做了修改,但是不想保留,再拉取更新的时候要强制覆盖本地文件,可以用如下命令。
git fetch --all
git reset --hard origin/master
git pull
解决冲突
有时候我们可能和别人同时修改了某一个文件,提交的时候发现文件已经被别人修改,并且提交了。这时,如果我们再提交文件的话会出现如下错误:
To https://github.com/huzhicheng/test__11.git
! [rejected] dev -> dev (fetch first)
error: failed to push some refs to 'https://github.com/huzhicheng/test__11.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
按照提示,我们尝试 git pull origin dev 获取最新版本,通常又会出现如下问题:
From https://github.com/huzhicheng/test__11
* branch dev -> FETCH_HEAD
e6bb7ea..c04d142 dev -> origin/dev
Auto-merging dev.md
CONFLICT (content): Merge conflict in dev.md
Automatic merge failed; fix conflicts and then commit the result.
意思是说,获取新版本尝试自动合并,但是合并失败,请修复冲突并提交。
这时我们打开冲突的文件,会看到有 <<<<<<< HEAD 、=======、>>>>>>> 这些符号,留下要合并的最后内容。然后再执行命令:
git add -u
git commit -m "解决冲突"
git pull origin dev
git push origin dev
建立并切换到新分支
如果项目中存在多个分支,例如主分支和开发分支,我们在本地创建同样的分支结构使用如下命令,创建 dev 分支,并且切换到 dev 分支 。
// 创建分支并且切换到这个分支下
git checkout -b dev
// 切换到某分支
git checkout dev
git checkout master
查看所在分支
其中前面带 * 号的为当前所在的分支。
$ git branch
* dev
master
分支合并
我们之前假设已经在 dev 分支上做了一些修改,可以发布版本之后,想要合并到 master 分支上。
首先使用 git checkout master 切换到 master 分支,然后执行 git merge dev 命令进行 dev 分支到 master 分支的合并。
$ git merge dev
Updating 1dd1bb5..5fe81cd
Fast-forward
dev.md | 6 ++++++
1 file changed, 6 insertions(+)
公众号:古时的风筝

使用 github 做代码管理,知道这些就够了的更多相关文章
- 完美解决--用VS中的Git做代码管理器,与他人共享代码
1.创建代码仓库,这里说一下为什么要创建仓库,Git不能够作为源代码管理器,vs中自带的也只能够在本地进行管理,要和他们共享的话必须要有服务器端去存储代码,类似于SVN,它就有客户端和服务器端,这里推 ...
- [资源]--完美解决--用VS中的Git做代码管理器,与他人共享代码
1.创建代码仓库,这里说一下为什么要创建仓库,Git不能够作为源代码管理器,vs中自带的也只能够在本地进行管理,要和他们共享的话必须要有服务器端去存储代码,类似于SVN,它就有客户端和服务器端,这里推 ...
- 软工实践个人练习-使用github进行代码管理
1.掌握使用Git进行代码版本,使用github进行代码托管. 2.创建小组Organization,并邀请组员进来. 3.将代码库https://github.com/sefzu2015/AutoC ...
- 使用Github进行代码管理
准备: Github地址:https://github.com 注册Github帐号 一.新建仓库 进入如下界面: 到这里仓库就创建完成了. 二.安装Github-window-desktop 安装g ...
- NetBeans集成SVN代码管理实例
最近给银行做一个小工具,要求用Java做一个C端带界面的小工具,想来想去用NetBeans最合适,因为Eclipse,MyEclipse,IDEA这些做界面得要额外的UI插件,比较麻烦. 我跟同事两个 ...
- Git 分支代码管理日记备注
1〉 Bithucket 创建代码库 2〉 下载克隆代码 Git clone 代码链接 3〉 代码初始化完成之后,切换到代码文件夹 cd 文件夹名 4〉 查看分支情况 Git brach 5〉 ...
- 使用Git进行代码管理的心得--github for windows
首先简述一下Git进行代码管理的情况 我使用的是github for windows,官网下载的速度太慢,所以用了离线安装包.安装之后会有GitHub和GitShell两个软件,其中Github采用图 ...
- 代码管理工具:使用github和git工具管理自己的代码
一.git工具和账户创建 1.1 安装 Git 是 Linus Torvalds 最近实现的源代码管理软件."Git 是一个快速.可扩展的分布式版本控制系统,它具有极为丰富的命令集,对内部系 ...
- 程序员的自我修养系列(一):优雅的代码管理工具之GitHub
1.导言 代码管理是程序员经常遇到一个问题,很多童鞋将代码保存到本地硬盘,此种方法管理混乱,也存在代码丢失的风险,且版本无法控制,因此养成良好的代码管理习惯是程序员的必修课.在众多代码管理工具中笔者在 ...
随机推荐
- 【css3】旋转倒计时
很多答题的H5界面上有旋转倒计时的效果,一个不断旋转减少的动画,类似于下图的这样. 今天研究了下,可以通过border旋转得到.一般我们可以通过border得到一个四段圆. See the Pen c ...
- Centos 6.9--配置python3.5
安装python3.5可能使用的依赖 yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlit ...
- 洛谷P2286 [HNOI2004]宠物收养场【Treap】题解+AC代码
题目传送门啦~啦~啦~ 题目描述 凡凡开了一间宠物收养场.收养场提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物. 每个领养者都希望领养到自己满意的宠物,凡凡根据领养者的要求通过他自己发明的 ...
- 你所有不知的margin属性
前言 致谢 本文总结于 张鑫旭老师的 CSS深入理解之margin课程,感谢张老师的辛苦付出! 难学的 CSS 作为前端狗的我们,每天都要和网页打交道.当 UI 将设计稿发给你时,CSS 的知识便显得 ...
- C/C++语言简介之优缺点
一.优点1.简洁紧凑.灵活方便 C语言一共只有32个关键字,9种控制语句,程序书写形式自由,区分大小写.把高级语言的基本结构和语句与低级语言的实用性结合起来.C 语言可以像汇编语言一样对位.字节和地址 ...
- rxjs-流式编程
前言 第一次接触rxjs也是因为angular2应用,内置了rxjs的依赖,了解之后发现它的强大,是一个可以代替promise的框架,但是只处理promise的东西有点拿尚方宝剑砍蚊子的意思. 如果我 ...
- 如何通过SpringBoot官方手册集成RabbitMQ
众所周知,SpringBoot是对Spring的一层封装,用来简化操作. 随着SpringBoot的越发成熟,很多的流行技术都提供了SpringBoot的版本. 可以点击下方的连接查看spring-b ...
- 【推荐】开源项目minapp-重新定义微信小程序的开发
minapp 重新定义微信小程序的开发 官网:https://qiu8310.github.io/minapp/ 作者:Mora minapp 重新定义微信小程序的开发 使用 用 npm 安装命令行工 ...
- HTTP协议报文结构及示例
HTTP基本架构 下面我们用一张简单的流程图来展示HTTP协议基本架构,以便大家先有个基本的了解. 9.png Web Client可以是浏览器.搜索引擎.机器人等等一切基于HTTP协议发起http请 ...
- OSQA的配置
1.安装Python,我安装的是python 2.7.3 2.安装setuptools 下载setuptools,并安装 安装好以后,在pyton2.7/scripts的路径下将会有easy_inst ...