使用 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(+)

公众号:古时的风筝

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏哲学驱动设计

发布 Rafy 源码到 GitHub

最近项目组开始使用 Git 来作为源码管理。我今天就顺便把 Rafy 的源码也迁移到了 github 上,方便大家使用。这是项目的地址:https://gith...

2216
来自专栏维C果糖

IntelliJ IDEA 中的版本控制介绍(下)

在「IntelliJ IDEA 中的版本控制介绍」中,我们已经简单了解了 IntelliJ IDEA 的版本控制机制,那么接下来,就让我们一起看看在 Intel...

2506
来自专栏屈政斌的专栏

【腾讯云的1001种玩法】centos 7 部署 dotnetcore + Angular2 实践

本文主要讲述了使用腾讯云主机,在centos 7 部署 dotnetcore + Angular2 的实践过程,该项目目前只是用于学习 dotnetcore ...

2.6K1
来自专栏racaljk

静态库(.a)与动态库(.so)的简明介绍

gcc有很多关于静态库,动态库的选项如-l,-L,-fPIC,-shared -Wl,-soname,看着很复杂容易混淆,其实静态库和动态库都是应需而生,只要有...

1585
来自专栏我的博客

Python上传文件到FTP服务器

代码在python2.7下测试通过!写在最前面! # -*- coding: UTF-8 -*- from ftplib import FTP import o...

6556
来自专栏代码世界

Git和GitHub相关

  Git是一个版本控制工具   GitHub是一个用git做版本控制的项目托管平台。

1203
来自专栏信安之路

教你如何去掉git历史中的敏感信息

本章教大家如何使用 GIT 进行一些关于已提交历史的修改、删除操作。比如碰到下列情况时,如何使用 GIT 实现想要的操作:

1430
来自专栏技术视野

使用tail查看并跟踪文本文件的结尾

tail命令是用于查看文本文件末尾的核心Linux实用程序。您还可以使用跟随模式查看实时添加到文件中的新行。tail类似于,用于查看文件的开头

2374
来自专栏编程之旅

iOS开发——在CocoaPods发布个人第三方库

podspec 文件是 Pod 库的描述文件,每个 Pod 库必须有且仅有一个这样的文件。文件名需要与我们将要创建的 Pod 库的名称一致,如我将创建的 Pod...

1542
来自专栏linux系统运维

环境变量PATH与cp,mv以及文档查看命令的用法

1815

扫码关注云+社区

领取腾讯云代金券