PythonGithub

Git初级入门1

2018-07-18  本文已影响84人  Fizz翊

· git 官方文档推荐 https://git-scm.com/book/zh/v1/%E8%B5%B7%E6%AD%A5

一、创建版本库

1创建一个版本库,

1.1

第一步选择一个合适的地方,创建一个空目录

$ mkdir learngit
$ cd learngit
$ pwd

代码说明: mkdir 用于创建目录
cd 切换工作目录到指定目录
pwd 用于显示当前目录路径

1.2

第二步通过git init命令把这个目录变成Git可以管理的仓库:

$ git init

反馈为:

Initialized empty Git repository in /User/michael/learngit/.git

会告诉你这个一个空目录,仓库就建好了。

2把文件添加到版本库

先编写一个readme.rtf文件,内容如下:
Git is a version control system.
Git is free software.

2.1

第一步,用命令git add 告诉Git,把文件添加到仓库

$ git add redme.rtf

执行尚明的命令,没有任何显示就对的了

2.2

第二步,用命令git commit告诉Git,把文件提交到仓库

$  git commit -m "wrote a readme file"

代码说明:-m 后面输入的是本次提交的说明,可以输入任意内容

git commit 命令执行成功会告诉你,一个文件被改动,插入了行的内容

为什么Git添加文件需要add,commit两步?

因为commit可以一次提交很多文件,所以可以多次add不同的文件

二、时光机穿梭

1.修改文件内容并上传

我们已经成功并且添加了一个readme.rdf文件,修改文件内容。

现在,运行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.rdf被修改过了,但还没有准备提交的修改。

$ git diff readme.rdf

反馈为:

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 ,查看不同.我们可以看到我们在第一排添加了一个单词。
知道了对文件做了什么修改后,在提交到仓库,提交修改和提交新文件是一样的两步,第一步是git add:

$ git add readme.rdf

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

$ git status

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

$ git commit -m "add distributed"

就成功提交了
然后我们在使用git status命令查看仓库的当前状态:

git status

反馈为:

# On branch master
nothing to commit (working directory clean)

Git告诉我们当前没有需要提交的修改,而且,工作目录是干净的(working directory clean)

2.版本回退
输入代码:

$ git log

反馈

commit 9b4e64a05be468ecaf4bedc1deb18b365079d72c (HEAD -> master)
Author: 赵航翊 <zhaohangyi@zhaohangyideMacBook-Pro.local>
Date:   Wed Jul 18 11:35:44 2018 +0800

    append GRL

commit cec15c8aaf4f1b83e60e4457bf91cbe64b49468a
Author: 赵航翊 <zhaohangyi@zhaohangyideMacBook-Pro.local>
Date:   Wed Jul 18 09:19:26 2018 +0800

    wrote a readme file

代码说明:git log 命令显示从最近到最远的提交日志。如果嫌输出信息太多,加上参数--pretty=oneline

$ git log --pretty=oneline
9b4e64a05be468ecaf4bedc1deb18b365079d72c (HEAD -> master) append GRL
cec15c8aaf4f1b83e60e4457bf91cbe64b49468a wrote a readme file

代码说明:前面的类似9b4e64a的是commit id (版本号)

退回上一个版本:

$ git reset --hard HEAD^

退回到指定版本:

$ git reset --hard (commit id)

commit id 不需要写全,前几位就行,Git会自动去寻找。

$ git reflog 

Git提供一个命令git reflog用来记录每一次命令。
穿梭前,用git log 命令查看提交历史,以便确定要回退到哪个版本
要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本

部分Git命令总结

命令 作用 备注
mkdir 创建目录
cd 切换工作目录当指定目录
pwd 显示当前工作目录路径
git init 把当前目录变成Git可以管理的仓库
git add 把文件添加到仓库
git commit -m"" 把文件提交到仓库 -m后面输出的是本次提交的说明
git status 查看仓库当前的状态
git diff 查看修改的不同
git log 查看历史记录
git log --pretty=oneline 查看历史记录 简化版
git reset --hard HEAD^ 回退到上一个版本
git reset --hard commit_id 回退到指定版本
cat 打开指定文件

三 Git名词解释

1.工作区:就是在电脑里能看到的目录,比如说learngit文件夹就是一个工作区
2.版本库:工作区有个隐藏目录“.git”,这个不算工作区,而是Git的版本
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分子master,以及指向master的一个指针叫HEAD

前面讲我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步用git add把文件添加进去,实际上就是把文件修改添加到暂存区
第二步用git commit 提交更改,实际上就是把暂存区的所有内容提交到当前分支

可以简单理解为:需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有文件修改

四 撤销修改

4.1未上传到暂存区

命令:

$ git checkout --readme.rtf 

代码说明:撤销在工作区的修改。
两种情况,一种是文件修改后还没有上传在暂存区,
一种是修改过的文件已经上传到暂存区区,又做了修改,现在撤销修改就回到添加到暂存区的暂态

4.2上传到暂存区

命令

git reset HEAD readme.rtf

代码说明:把暂存区的修改撤销掉,重新放回工作区。
git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们使用HEAD时,表示最新的版本。

小结:
场景1:当你改乱了⼯工作区某个⽂文件的内容,想直接丢弃⼯工作区的修改时,⽤用命令git checkout -- file。
场景2:当你不但改乱了⼯工作区某个⽂文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第⼀一步⽤用命令git reset HEAD file,就回到了场景1,第⼆二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退⼀一节,不 过前提是没有推送到远程库

五 删除文件

在Git中,删除也是一个修改操作。一般情况下,用rm命令删除:

rm test.rtf

这个时候,Git知道你删除了文件,因此,工作区和版本库就不一样了,git status命令会立刻告诉你哪些文件被删除了。

$ git status



deleted:    test.txt

5.1确认删除该文件

用命令git rm删除掉,并且commit

git rm test.rtf
git commit -m "remove"

这样文件就从版本库中删除了

5.2取消删除

因为版本库中还有,恢复到最新版本就好。
$ git checkout -- test.rtf

六 远程仓库

6.1关联远程仓库GitHub

首先请自行注册GitHub账号。由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以请先设置一点东西。

第一步 创建SSH Key。

在用户主目录下,看有没有.SSH目录,.文件默认情况下是隐藏的,具体方法请自行百度。如果有,看下文件夹里面有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,就直接一下步,如果没有就打开Shell,创建SSH Key:

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

PS:在这里你需要把邮件地址换成你自己的邮件地址,然后一路回车,密码也无需设置。

如果一切顺利,就可以在用户主目录里面找到.ssh目录,里面有上面提到的两个文件,这两个是SSH Key的密匙对,id_rsa是私匙,不能泄露出去。另外一个id_rsa.pub是公钥,可以告诉别人

第二步 登陆GitHub

点击右上角的头像,选择“settings”,“SSH and GPG keys”页面。然后点“Add SSH Key”,填上任意title ,然后在下面的KEY文本框里粘贴上id_rsa.pub⽂文件的内容。
完成后点击ADD KEY ,你就可以看到已经添加到的KEY.

6.2 添加远程库

现在你已经在本机创建了一个Git仓库,又想在GitHub上创建一个仓库并且使两个仓库进行远程同步。

第一步

登陆GitHub,然后在右上角头像的左边找到➕按钮,选择 New repository,创建一个新仓库。在name处填入仓库的名字,其他保持默认,点击 create repository按钮创建一个新的Git仓库

PS:务必保持两个仓库的名字一样

第二步

在本地的learngit仓库下运行命令:

$ git remote add origin git@github.com:Fizzyi/learngit.git

把上面的Fizzyi换成你的GitHub账户名。

添加后,远程库的名字就是origin,这是Git的默认叫法。

第三步

把本地库的所有内容推送到远程库上:

$ git push -u origin master

用git命令,实际上是把当前分支master推送到远程库。

由于这是第一次推送,我们加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支利和远程的master分支关联起来,在以后的推送中就可以简化命令。

成功后,就可以在GitHub上面看到和本地一模一样的文件。

从此之后,只要本地add,commit后,就可以通过这个命令把本地master分支的最新修改推送到github中。

$ git push origin master

6.3从远程库克隆

现在,假设我们从零开发,那么最好的方法是先创建远程库,然后,从远程库克隆。

命令:

$git clone git@github.com:Fizzyi/JS.git

Fizzyi替换成你的GitHub账号,JS换成你需要克隆的文件夹名称

分支总结
查看分支:git branch
创建分支:git branch name
切换分支:git checkout name
创建+切换分⽀=支:git checkout -b name
合并某分支到当前分支:git merge name
删除分支:git branch -d name

7更新文件

第一步:

git add 更新文件名

第二步:

git commit -m '更新说明'

第三步:
拉取当前分支最新代码

git pull

第四步:
push到远程分支master

git push origin master

这样就成功更新了文件

上一篇下一篇

猜你喜欢

热点阅读