git的常用指令学习

一、GIT的本地操作

1.安装Git

较新的Ubuntu是集成的Git的,若没安装,使用一条简单的指令即可

$ git
The program 'git' is currently not installed. You can install it by typing:
$ sudo apt-get install git

2.创建版本库

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

$ mkdir learngit
$ cd learngit
$ pwd//pwd显示当前目录
/Users/michael/learngit
```一、GIT的本地操作
第二步:在这个目录下初始化仓库:

```python
$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/

现在,用git管理的文件使用以下代码进行管理

$ git add readme.txt //可以多添加几次
$ git commit -m "说明注释"//可以看到自己每次版本具体修改情况
  1 file changed, 1 insertion(+), 1 deletion(-)

3.版本回退

我们使用git log命令查看我们的文件改变了什么内容
git log指令显示了从最近到最远的提交日志 ,如果嫌弃输出内容多,可以加上pretty=oneline 参数

$ git log
commit 1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master)
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Fri May 18 21:06:15 2018 +0800

    append GPL

commit e475afc93c209a690c39c13a46716e8fa000c366
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Fri May 18 21:03:36 2018 +0800

    add distributed

commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Fri May 18 20:59:18 2018 +0800

    wrote a readme file

现在,我们可以使用以下命令将文件回退到上个版本

$ git reset --hard HEAD^ //^”的意思是把版本回退到上个版本 两个版本就是"^^"一百个就是“HEAD~100”
现在查看一下git log的状态
HEAD is now at e475afc add distributed

现在查看一下git log的状态

$ git log
commit e475afc93c209a690c39c13a46716e8fa000c366 (HEAD -> master)
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Fri May 18 21:03:36 2018 +0800

    add distributed

commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Fri May 18 20:59:18 2018 +0800

    wrote a readme file

现在,“append GPL”已经看不到了,如果想恢复这个版本,使用

$ git reset --hard 1094a
HEAD is now at 83b0afe append GPL

如果终端关闭,查不到了过去的版本号怎么办?使用以下指令

$ git reflog
e475afc HEAD@{1}: reset: moving to HEAD^
1094adb (HEAD -> master) HEAD@{2}: commit: append GPL
e475afc HEAD@{3}: commit: add distributed
eaadf4e HEAD@{4}: commit (initial): wrote a readme file

4.工作区和暂存区

首先介绍以下工作区的概念,比如上面目录learningit就是我们的工作区,git的具体结构如下图:
Git的三个区域
​​第一步我们使用 git add 实际上是把文件修改从工作区添加到了暂存区(stage)
第二步使用 git commit 提交更改,实际上就是把文件修改提交到了当前分支(master)
可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性把所有内容都提交到了当前分支。
可以使用 git status 查看当前的版本状态。

5.管理修改

注意这个例子:第一次修改->git add ->第二次修改-> git commit ,此时只是提交了一次,因为commit命令只是提交了暂存区的版本修改,对于本地工作区的修改,commit是不提交的。我们可以使用 git diff HEAD --file 命令查看工作区和版本库最新版本的区别。

6.撤销修改

如果你在工作区的文件被你修改的出现了一个BUG,侧可以使用以下命令丢弃工作区的修改:

$ git checkout -- readme.txt// file name

命令 的意思是,把文件在工作区的修改全部撤销,有两种情况:
一种是文件修改后,还没有add到暂存区,这条指令就会把文件撤销修改回到和版本库一模一样的状态;
另一种是文件已经添加到了暂存区,又在本地做了修改,这条指令就撤销修改回到添加到暂存区的状态。
总之,优先回到add的状态,add为空时,回到commit的状态。

如果暂存区的文件也是有BUG的,但还没有提交,我们可以使用reset命令将暂存区的修改撤销掉,并重新回退到工作区:

$ git reset HEAD readme.txt
Unstaged changes after reset:
M    readme.txt

可见 git reset 命令既可以回退版本,也可以将暂存区的修改撤销掉。

7.删除文件

当你把工作区中的文件,使用rm file 命令删除了,此时,git是知道你删除了文件,此时工作区和版本库的内容就不一致了,使用git status 可以看到那些文件被删除了,现在有两个选择,第一种情况是想从版本库中删除文件,那么这样操作

$ git rm test.txt
rm 'test.txt'

$ git commit -m "remove test.txt"
[master d46f35e] remove test.txt
 1 file changed, 1 deletion(-)
 delete mode 100644 test.txt

第二种情况是删错了,那么使用checkout文件可以恢复到最新版本。

$ git checkout -- test.txt

git checkout 其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以一键还原。

二、Git的远程操作(远程仓库)

1.添加SSH key

首先,linux系统下在主目录里面看看是否含有.ssh文件,如果有id_rsaid_rsa.pub文件那么直接跳过这一步,否则使用以下命令创建SSH key:

$ ssh-keygen -t rsa -C "[email protected]"

一路回车使用默认设置即可。
现在看主目录里面是否有.ssh文件,如果有,进入这个目录复制id_rsa.pub里面的内容。
现在登录GitHub,–Settings–SSH and GPG keys—New SSH key(其中titile随便写即可)
现在你可以通过你的本地主机向GitHub上传你的代码了。

2.添加远程仓库

在自己的主页上找到"Create a new repo"按钮,创建一个新的仓库,在name处填入learningit,现在成功创建了一个新的git仓库。

现在根据GitHub的提示,在本地的learningit仓库下运行命令:

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

BoAn95要替换成自己的GitHub账户名,否则登录不上去。

添加后远程库的名字就叫做origin,这是git的默认叫法,也可以改成别的。

之后,我们可以把本地库的所有内容推送到远程库上:

$ git push -u origin master
Counting objects: 20, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (15/15), done.
Writing objects: 100% (20/20), 1.64 KiB | 560.00 KiB/s, done.
Total 20 (delta 5), reused 0 (delta 0)
remote: Resolving deltas: 100% (5/5), done.
To github.com:michaelliao/learngit.git
 * [new branch]      master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.

其中,把本地库的内容推送到远程用的是git push命令,实际上是把当前分支master推送到远程。
远程库的是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支推送到远程的新的mater分支,还会自动关联他们两个。以后在推送或者拉取时候可以简化命令。

之后使用命令:

git push origin master

就可以把本地分支的最新修改推送到GitHub。

3.从远程库克隆

之前,已经了解了已经有本地库,如何关联远程库。
现在,我们先创建远程库,然后,从远程库克隆。
先在GitHub上创建一个新的仓库,名字叫做gitskills。
勾选Initialize this repository with a README,这样仓库里面自动创建一个README.md文件。
至此,远程仓库已经创建好了,下面使用git clone克隆一个本地库:

$ git clone git@github.com:BoAn95/gitskills.git
Cloning into 'gitskills'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 3
Receiving objects: 100% (3/3), done.

进入gitskills目录看看,已经有README.md文件了。

三、分支管理

猜你喜欢

转载自blog.csdn.net/u011851421/article/details/82991815