看的廖大大的git教程 廖大大git教程链接

git是用linux写的,加上自己在学校也正在学Linux,所以觉得学着还是挺简单的

创建版本库

1.git init
将所在目录变成Git可以管理的仓库,现在这是个空的仓库,且最后一个目录是.git,是Git来跟踪管理版本库的

Git添加文件,两步

2.git add
告诉Git,将文件添加进仓库

3.git commit -m"说明文字"
告诉Git,将文件提交到仓库,-m后面跟的是一段说明文字,一般说明自己干了什么,方便自己和他人的阅读。

为什么Git添加文件需要add,commit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件

时光机穿梭

1. 要随时掌握工作区的状态,使用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")

modified: readme.txt 提醒我们readme.txt被修改过

2.如果git status告诉你有文件被修改过,用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.

从倒数三行看,-去掉的部分,+增加的部分,所以可看出第一行修改了,第二行没动

若出现这样的报错(fatal: Unable to create ‘C:/Users/DELL/learngit/.git/index.lock’: File exists.

Another git process seems to be running in this repository, e.g.
an editor opened by ‘git commit’. Please make sure all processes
are terminated then try again. If it still fails, a git process
may have crashed in this repository earlier:
remove the file manually to continue.)那么就是程序崩溃了,就要删除learngit下的隐藏项目.git里的index.lock文件,想要查看隐藏项目则点开查看,点击显示隐藏项目就行了

版本回退

每用commit提交一次,其实就是一个时间节点或者可以说是文件的一个历史版本,我们可以回到以往的任何一个时间节点或是历史版本。

1.log查看历史版本

$ git log
commit dd5d42c57ea82b3e86362ca7a0cdef10d44a2442 (HEAD -> master)
Author: yuanfajun <101417673@qq.com>
Date:   Tue Oct 15 13:38:32 2019 +0800

    append GPL...

commit a6a4f0431f131e1de109ebca434d89b77a15f4d2
Author: yuanfajun <101417673@qq.com>
Date:   Mon Oct 14 22:17:13 2019 +0800

    add distributed

commit 282cab5f639842b2633a8c787d5069cadff00339
Author: yuanfajun <101417673@qq.com>
Date:   Mon Oct 14 17:16:09 2019 +0800

    wrote a readme file

commit dd5d42c57ea82b3e86362ca7a0cdef10d44a2442 这一长串是commit的id

HEAD表示我们当前所在的版本,上个版本是HEAD^,上上版本是HEAD^^,前100个版本是HEAD~100

2.回到历史版本
git reset --hard可回到历史版本(–hard是个参数,暂且不管他)

$ git reset --hard HEAD^
HEAD is now at a6a4f04 add distributed

3.后悔了,回到“将来”版本
回到历史版本后,我们用git log可看到我们的“将来”版本消失了,若后悔了,要回去在怎么办呢?其实还是用 git reset --hard,后面跟“将来”版本的id就行了(不用全部id,前几位即可)

$ git reset --hard dd5d42c57e
HEAD is now at dd5d42c append GPL...

工作区和暂存区

一般来说,可看到的文件都在工作区里。

工作区下面有一个隐藏目录.git,它是Git的版本库,它包含缓存区和Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

在工作区里面,修改和增加的文件,需要add,commit才能提交到Git中的master中,这样Git才能管理它们,才能用Git的一些命令

工作区的文件add后会到达缓存区,再经过commit后会到达master中

借用一位网友的说法,工作区像个超市,缓存区就像是一个购物车,你将想要的文件放到缓存区中,不想要了就移出去,等到最后确定了想要的东西,再commit提交(将购物车里面的东西付款)

管理修改

Git是管理修改,并不是管理文件的

例如:我们修改了一个文件,add到缓存区,再修改这个文件,再commit,会发现提交的只是第一个修改。因为第二次修改并没有被add到缓存区,所以Git管理修改,并不是管理文件。

撤销修改

git checkout – file可以撤销工作区的修改

命令git checkout – readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

总之,就是让这个文件回到最近一次git commit或git add时的状态。

git reset HEAD <file>可以把暂存区的修改撤销掉(unstage),重新放回工作区

git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。


场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout – file


场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>,就回到了场景1,第二步按场景1操作。


场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。

删除文件

你在工作区创建了个新文件test.txt并把它add,commit提交到了Git中,但你在工作区把它删除了

1.确实想删除这个文件,并且想在Git中把它删了

git rm <file>在Git中删除这个文件后,git commit -m "remove <file>"提交给Git,这样就完全删除了

2.删错了,不想删掉这个文件,并且想把它找回来

git checkout – <file>

文件在工作区被删除,但是还在Git库里,所以可以这样找回来。git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

添加远程库

过程在廖大大的教程里很详细,不过有个问题,我们若是没有添加SSH公钥,那么就push不上去,具体看第一个评论下的最后一个回复

从远程库克隆

$ git clone git@github.com:yuanfajun0912/gitskills.git

在远程库例如github上建个仓库,我们可以这样将github上的仓库克隆到本地仓库上。

注意:将github上的仓库克隆到本地上,这个仓库不能是空仓库,可以在创建仓库时将Initialize this repository with a README 这个按钮勾选,这样仓库会自带一个README文件。

课后练习:将自己电脑上的项目文件用git上传到github上

  1. 在github上新建一个空仓库(里面要包含README文件)
  2. 将github上的空仓库克隆到本地仓库
  3. 将项目文件复制到本地仓库中
  4. add,commit -m将文件提交到Git中
  5. 将文件同步推送到github新建的仓库里

所需命令:(名称,仓库名称自行替换成自己的)

  1. $ git clone git@github.com:yuanfajun0912/2048game.git

  2. $ git add <file>
    $ git commit -m “…”

  3. $ git pull --rebase origin master (这条代码来自这里
    $ git push -u origin master

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐