Git学习资料整理及常见问题总结

本文详细介绍Git版本控制系统和Github代码托管平台的基本概念与实践操作,包括本地仓库与远程仓库的关联、代码的推送与拉取、常见异常处理等,适合初学者入门。

回顾Jungle写硕士论文时,虽不至于“披阅十载,增删五次”,但也费心思修改了很多次。每修改一次都得把之前的复制备份保存,下图是部分修改版本的截图。如果修改20次,那么本地计算机里就得保存20个版本的论文!不但占据本地空间,而且要查找某一次修改点时及其不方便。软件代码也是一样,如何管理日渐庞大的软件项目,Git和Github就是重要的版本控制和管理工具。

1.Git和Github

1.1.Git

Git 是一个免费并且开源的分布式版本控制系统,被设计用来快速、高效的管理一切从小到大的项目。

说分布式之前先了解下集中式。集中式版本控制系统的版本库存放在中央服务器,开发人员在开发前得从中央服务器获取最新的代码到自己电脑上,然后才可以工作。工作完了,再把新代码传到中央服务器去。缺点在于:

  • 必须联网,否则不能访问中央服务器。而且如果网速慢,下载和上传代码会非常慢。
  • 如果中央服务器出故障,不但开发人员无法工作,甚至服务器上的代码可能会丢失。

分布式版本控制系统,没有所谓的 “中央服务器” 。每一台电脑都有一个完整的版本库,每一台电脑都可以作为“中央服务器”。工作时并不需要联网。如果是团队协作的话,只需要把修改的文件推送给对方即可。

1.2.Github

GitHub 是一个利用 Git 进行版本控制、专门用于存放软件代码与内容的共享虚拟主机服务。

Github 社区地址: https://github.com

1.3.两者之间的关系

Github 是利用 Git 来进行版本控制的。所以 Git 对于 Github 来说只是一个用来管理项目的工具。但Github的功能远不止于此。

1.4.注册Github账号,本地安装git

登录https://github.com可以注册Github账号,在Git官网下载Git( http://git-scm.com/download/win)并安装。安装完成后鼠标右键单击,菜单中可出现Git bash,即安装成功。

安装完 Git ,设置用户名称与邮件地址。 这一步是必须的,每一个 Git 的提交都会使用这些信息,不可更改:

$ git config --global user.name "FengJungle"
$ git config --global user.email fengjungle@126.com

输入命令git config --list 可以查看所有配置。 

2.Git常用操作实践

2.1.本地分支关联远程仓库

首先,登录Github账号,在Github上创建了一个新的仓库HelloWorld,这是一个新仓库,附带一个README.md文档。

然后,在本地创建了一个文件夹Git,如何让本地文件夹和远程仓库关联起来呢?两种办法:

(1)本地通过Git bash从远程上clone,这样本地就会有一个HelloWorld的文件夹,包含一个README.md文档。

(2)本地有仓库或代码,让本地和远程仓库关联:

$ git init
$ git remote add origin https://github.com/FengJungle/HelloWorld

这个时候可以通过下列命令查看远程地址:

$ git remote -v
origin  https://github.com/FengJungle/HelloWorld (fetch)
origin  https://github.com/FengJungle/HelloWorld (push)

但此时,本地和远程还没有关联起来,还需要进行下面的步骤,否则不能pull或push:

$ git branch --set-upstream-to=origin/master master

 如果运行这一行命令后提示

fatal: branch 'master' does not exist

那么需要运行

$ git pull origin master --allow-unrelated-histories
或者可能是本地仓库不在master分支上,则checkout回本地分支
$ git checkout master

此时即可以pull代码了。

2.2. pull代码

$ git pull

2.3.管理本地代码

本地写了个打印Hello World功能的代码,保存在HelloWorld.c文件里。如何将其push到远程仓库呢?首先要了解下工作区和暂存区。本地代码(工作区)通过git add加入到暂存区(staged),暂存区代码通过git commit添加到本地仓库里。当然,暂存区的文件可以通过git reset HEAD <file>返回到本地工作区。通过git status可以查看每一个文件的状态。

总结如下:

加入修改了一个文件hello.c

$ git add hello.c         # 将本地工作区的hello.c添加到暂存区
$ git reset HEAD hello.c  # 将暂存区的hello.c撤销,返回到本地工作区
$ git status              # 查看文件状态
$ git commit              # 将暂存区的hello.c提交到本地仓库

修改了本地工作区的文件Hello.c,下列命令可以撤销该修改
$ git checkout Hello.c

2.4.push代码到远程仓库

$ git push

接下来在Github上就可以看到本地已经修改的代码了。

2.5.其他常用命令

$ git log     # 查看历史提交
$ git reflog  # 查看历史命令

3.学习网站

4.Git常见异常处理

Updates were rejected because the tip of your current branch is behind

在push的时候报“Updates were rejected because the tip of your current branch is behind”

这是由于远程repository和我本地的repository冲突造成。解决办法有两个:

1.强制push

git push -u origin master -f 

但既然是强制的,就可能有风险,比如破坏远程的修改。

2.先pull,修改后再push

git pull

## 修改后

git push

commit没有change ID

这一条是在gerrit中,使用Git提交代码时,遇到missing Change-Id in commit message footer。这是因为没有安装hooks钩子。

运行下面两条命令,再commit即可。注意第二条命令的commit-msg和${gitdir}之间有个空格,否则命令运行不成功

$ gitdir=$(git rev-parse --git-dir)
$ scp -p -P 29418 name@xxx.xxx.xxx.xxx:hooks/commit-msg ${gitdir}/hooks/

修改之前提交的commit信息

当想修改之前某次commit的注释信息,或者为之前某次commit增加change ID,可以按照如下的方法:

# 假设你需要修改倒数第n次commit的提交信息
$ git rebase -i HEAD~n
# 进入编辑模式,会出现类似以下的内容
pick 6608e22 修改代码结构调整导致不能正常显示的问题
pick 1d381cd 菜单切换可用
...

# 将需要修改的commit的那一行的pick修改为edit,然后保存退出
# 然后输入
$ git commit --amend
# 进入你需要修改的commit编辑界面,编辑后保存退出
# 修改结束后,输入以下命令返回到最新的commit
$ git rebase --continue

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冯Jungle

您的支持是对我最大的鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值