git精简教程

创建版本库

版本库又名仓库,可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪。
假设现在已经安装了git,打开Git下的Bash,

	$ cd g:
	$ mkdir learngit
	$ cd learngit
	$ pwd
	/g/learngit	

pwd命令用于显示当前目录,我的文件目录是g:/learngit。
第二步,通过git init命令把这个目录变成Git可以管理的仓库:

	$ git init
	Initialized empty Git repository in G:/learngit/.git/

瞬间Git就把仓库建好了,并告知这是一个空的仓库(empty Git repository),细我们还会发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,注意千万不要手动修改这个目录里面的文件,不然就把Git仓库给破坏了。

把文件添加到版本库

现在编写一个readme.txt文件,内容如下:

	Git is a version control system.
	Git is free software.

一定要放到learngit目录下(子目录也行),因为这是一个Git仓库,放到其他地方Git再厉害也找不到这个文件。
添加文件到Git仓库,分两步
和把大象放到冰箱需要3步相比,把一个文件放到Git仓库只需要两步。
第一步,用命令git add告诉Git,把文件添加到仓库:

	$ git add readme.txt

执行上面的命令,没有任何显示,表示成功。
第二步,用命令git commit告诉Git,把文件提交到仓库:

	$ git commit -m "wrote a readme file"
	[master (root-commit) eaadf4e] wrote a readme file
	1 file changed, 2 inserttions(+)
	create mode 100644 readme.txt

简单解释一下git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
git commit命令执行成功后会告诉你,1 file changed:1个文件被改动(我们新添加的readme.txt文件);2 insertions:插入了两行内容(readme.txt有两行内容)。

运行git status命令看看结果:

	$ git status
	On branch master
	nothing to commit, working tree clean

git status命令可以让我们时刻掌握仓库当前的状态。

提交文件到仓库

于是,我们继续修改readme.txt文件,改成如下内容:

Git is a distributed version control system.
Git is free software.

现在,运行git status命令看看结果:

$ git status
On branch master
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:   readme.txt

no changes added to commit (use "git add" and/or "git commit -a")

git status命令可以让我们时刻掌握仓库当前的状态,上面的命令输出告诉我们,readme.txt被修改过了,但还没有准备提交的修改。

虽然Git告诉我们readme.txt被修改了,但如果能看看具体修改了什么内容,自然是很好的。比如你休假两周从国外回来,第一天上班时,已经记不清上次怎么修改的readme.txt,所以,需要用git diff这个命令看看:

	$ git diff readme.txt 
	diff --git a/readme.txt b/readme.txt
	index 46d49bf..9247db6 100644
	--- a/readme.txt
	+++ b/readme.txt
	@@ -1,2 +1,2 @@
	-Git is a version control system.
	+Git is a distributed version control system.
	 Git is free software.

git diff顾名思义就是查看difference,显示的格式正是Unix通用的diff格式,可以从上面的命令输出看到,我们在第一行添加了一个distributed单词。

知道了对readme.txt作了什么修改后,再把它提交到仓库就放心多了,提交修改和提交新文件是一样的两步
第一步是git add:

	$ git add readme.txt

同样没有任何输出。在执行第二步git commit之前,我们再运行git status看看当前仓库的状态:

	$ git status
	On branch master
	Changes to be committed:
 	(use "git reset HEAD <file>..." to unstage)

	modified:   readme.txt

git status告诉我们,将要被提交的修改包括readme.txt,下一步,就可以放心地提交了:

	$ git commit -m "add distributed"
	[master e475afc] add distributed
	 1 file changed, 1 insertion(+), 1 deletion(-)

提交后,我们再用git status命令看看仓库的当前状态:

	$ git status
	On branch master
	nothing to commit, working tree clean

Git告诉我们当前没有需要提交的修改,而且,工作目录是干净(working tree clean)的。
工作区
就是在电脑里能看到的目录,比如刚才建的learngit文件夹就是一个工作区:
仓库,即版本库(Repository)
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

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


然后,在工作区新增一个LICENSE文本文件(内容随便写)
先用git status查看一下状态:

	$ git status
On branch master
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:   readme.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)

	LICENSE

no changes added to commit (use "git add" and/or "git commit -a")

Git非常清楚地告诉我们,而LICENSE还从来没有被添加过,所以它的状态是Untracked。

现在,使用两次命令git add,把readme.txt和LICENSE都添加后,用git status再查看一下:

	$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

	new file:   LICENSE
	modified:   readme.txt

所以,git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支

	$ git commit -m "understand how stage works"
[master e43a48b] understand how stage works
 2 files changed, 2 insertions(+)
 create mode 100644 LICENSE

一旦提交后,如果你又没有对工作区做任何修改,那么工作区就是“干净”的:

	$ git status
   On branch master
   nothing to commit, working tree clean

现在版本库变成了这样,暂存区就没有任何内容了:

在这里插入图片描述

远程仓库

到目前为止,我们已经掌握了如何在Git仓库里对一个文件进行时光穿梭,你再也不用担心文件备份或者丢失的问题了。
有个叫GitHub的神奇的网站,从名字就可以看出,这个网站就是提供Git仓库托管服务的,所以,只要注册一个GitHub账号,就可以免费获得Git远程仓库。
由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置:

第1步:创建SSH Key

在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

	$ ssh-keygen -t rsa -C "youremail@example.com"

你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。
可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
在这里插入图片描述

第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面:

然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:
在这里插入图片描述

点“Add Key”,你就应该看到已经添加的Key

为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。

当然,GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。

添加远程仓库

首先,登陆GitHub,然后,在右上角找到“Create a new repo”按钮,创建一个新的仓库,在Repository name填入learngit,其他保持默认设置,点击“Create repository”按钮,就成功地创建了一个新的Git仓库。

目前,在GitHub上的这个learngit仓库还是空的,GitHub告诉我们,可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。
现在,我们根据GitHub的提示,在本地的learngit仓库下(也就是要上传的文件夹)运行命令:

	$ git config --global user.name "198*****68"
	$ git config --global user.email "157**@163.com"
	$ git init
	$ git remote add origin https://gitee.com/Cla**me/WebDevelop
	$ git push -u origin master

push成功!!

git从远程仓库拉取代码的常用指令

	git pull origin master

遇到的两个问题

1.错误提示 fatal: remote origin already exists.

	$ git remote add origin https://gitee.com/Cl***/WebDevelop.git
	fatal: remote origin already exists.

解决办法:
这是因为刚刚已经连接了远程仓库了,我们要清除掉连接,重新连接。

	git remote rm origin

2. 错误提示 remote:Incorrect username or password(access token);

解决办法:
gitee推送到远程仓库时提示错误,清除本地的gitee用户名和密码

	$ git config system --unset credential.helper

再执行推送,重新输入用户名和密码。

参考博客:

3. 错误提示 error: failed to push some refs to ‘xxx(远程库)’

在这里插入图片描述
此时很多人会尝试下面的命令把当前分支代码上传到master分支上。

	$ git push -u origin master 

但依然没能解决问题
解决办法:
出现错误的主要原因是WebDevelop中的README.md文件不在本地代码目录中!!!
可以通过如下命令进行代码合并【注:pull=fetch+merge]

	$ git pull –rebase origin master

执行上面代码后可以看到本地代码库中多了README.md文件
在这里插入图片描述
此时再执行语句 git push -u origin master即可完成代码上传到WebDevelop。

4. 错误提示 Already-to-date

本来已经把远程仓库上的master分支拉取下来了,也就是远程仓库知道我已经拉取过了,它会认为我现在本地仓库上目前的master代码是最新的,但是我不小心删掉了本地仓库里面的一个文件夹,所以想要再去拉取一下,但是远程仓库返回说“Already up to date.”
在这里插入图片描述
解决办法
原因我们已经知道了,所以解决办法是
在这里插入图片描述
然后再去看,就可以发现丢失的文件夹,又回来了,这就是远程仓库识别了fetch的命令,然后又根据reset命令,将本地仓库进行“重置”

删除远程仓库的文件夹

在github上只能删除仓库,却无法删除文件夹或文件, 所以只能通过命令来解决

首先进入你的master文件夹下, Git Bash Here ,打开命令窗口

$ git --help 帮助命令

$ git pull origin master 将远程仓库里面的项目拉下来

$ dir 查看有哪些文件夹

$ git rm -r --cached target 删除target文件夹
在这里插入图片描述
$ git commit -m ‘删除了target’ 提交,添加操作说明
在这里插入图片描述

$ git push -u origin master 将本次更改更新到github项目上去
在这里插入图片描述

合并代码

  • 切换master分支
	git checkout master
  • 拉取合并claire分支的代码
	git pull origin claire
  • 拉取合并liang分支的代码
	git pull origin liang
  • 提交代码到远程仓库
	git push origin master

参考博客:https://blog.csdn.net/qq_28301007/article/details/77917957

最后,强推廖雪峰大神的博客,有详细的讲解:https://www.liaoxuefeng.com/wiki/896043488029600,强推!!!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值