git基础操作

73 阅读5分钟

一、Git简介:

2008年,GitHub网站上线,它为开源项目免费提供Git存储,成为最流行的分布式版本控制系统。

1. 集中式和分布式版本控制系统区别

(1)集中式。

版本库集中存放在中央服务器,使用时需要先从中央服务器中下载最新版本,经过自己修改后再上传到中央服务器,这也就表明在使用集中式版本控制系统时必须处在网络良好的环境中。CVS和SVN都是集中式的版本控制系统。

(2)分布式。

分布式版本控制系统(Git)没有中央服务器,每个使用者的电脑都是一个版本控制中心,当需要多人协作时,只需将自己做的修改推送给对方即可共享版本库。

在多人协作时如果多个人都是处在一个局域网中那么就可以进行相互推送修改,但是如果团队中人数大于两人这样操作非常麻烦,况且如果不是处在同一局域网下就不能进行连接。所以在分布式版本控制中也需要有一台充当中央服务器的电脑,方便一个团队中的人提交修改和拉取最新版本。在没有网络的情况下只是不能使用中央服务器这个中继,不方便团队交互修改内容,但是依然可以进行版本控制。

二、简易的命令行使用教程

Git 全局设置:

// 设置当前用户名称
git config --global user.name "MIOU"
// 设置当前用户地址
git config --global user.email "15735169673@163.com"

创建本地Git 仓库,关联远程仓库:

// 1.创建目录
mkdir zhaopin-am
cd zhaopin-am
// 2.把当前目录初始化为Git管理的仓库
git init
touch README.md
// 3.添加文件到版本库
git add .  // 添加文件到暂存区
git commit -m "first commit"  //  将暂存区的所有内容提交到当前分支
git remote add origin https://gitee.com/mi_ou/zhaopin-am.git  // 关联远程仓库
git push -u origin master  // 把本地仓库内容推送到远程仓库

已有本地仓库?

// 跳过创建本地仓库过程,直接关联
cd existin g_git_repo
git remote add origin https://gitee.com/mi_ou/zhaopin-am.git
git push -u origin master

从远程仓库拉取文件:

git clone git@github.com:xxxx  // 克隆到本地

注意:GitHub给出的 地址有HTTPS和SSH协议,使用HTTPS每次推送都必须输入口令,SSH协议速度比较快

三、版本回退

使用git commit命令后就会在版本库中添加一个新的版本存档,记录了此次操作的 commit id,author,date和修改说明。通过使用git log命令查看,也可以使用git log --pretty=oneline进行简要查看。

执行版本回退操作时,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交1094adb...(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100, 回退上一个版本如下:

git reset --hard HEAD^

你回退到了某个版本,之后就后悔了,想恢复到新版本怎么办?恢复到某个版本必须知道该版本的commit id,Git提供了一个命令git reflog用来记录你的每一次命令,通过该命令找到提交时的commit id, 然后使用命令 git reset --hard "commit id"就可以恢复到此版本。

四、工作区、暂存区、版本库

工作区(Working Directory)

就是你在电脑里能看到的目录,比创建的learngit文件夹就是一个工作区

版本库(Repository)

工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库

Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

暂存区(stage)

git add把文件添加进去,实际上就是把文件修改添加到暂存区;

使用git status可以查看工作区状态,包括已修改和未跟踪的文件。

五、撤销修改

场景1: 在工作区修改,没有添加到暂存区 git checkout -- file

场景2:在工作区修改并添加到暂存区,,第一步用命令git reset HEAD <file>,就回到了场景1,第二步按场景1操作。

场景3:已经提交到版本库,但是没有推送到远程库,使用版本回退git reset --hard HEAD^

四、其它常用操作

修改未push的commit信息

git commit --amend 修改commit信息(未push)

修改已提交的commit信息

# 假设你需要修改倒数第n次commit的提交信息
$ git rebase -i HEAD~n
# 进入编辑模式,会出现类似以下的内容
pick 6608e22 修改代码结构调整导致不能正常显示的问题
pick 1d381cd 菜单切换可用
...
​
# 将需要修改的commit的那一行的pick修改为edit,然后保存退出
# 然后输入
$ git commit --amend
# 进入你需要修改的commit编辑界面,编辑后保存退出
# 修改结束后,输入以下命令返回到最新的commit
$ git rebase --continue
​
git push origin <you_branch_name> -f
​

五、常见错误:

error: failed to push some refs to '远程地址'

原因:远端新建的仓库和本地都非空,都有未跟踪的内容

解决:

1. git pull --rebase origin master
2. git push -u origin master

\