Git 基本操作

Git 的工作就是创建和保存项目的快照及与之后的快照进行对比。

本章将对有关创建与提交你的项目快照的命令作介绍。

Git 常用命令:

  • git clone
  • git push
  • git add
  • git commit
  • git checkout
  • git pull

在这里插入图片描述

创建仓库命令

命令说明
git init初始化仓库
git clone拷贝一份远程仓库,也就是下载一个项目

提交与修改

命令说明
git add添加文件到暂存区
git status查看仓库当前的状态,显示有变更的文件
git diff比较文件的不同,即暂存区和工作区的差异
git commit提交暂存区到本地仓库
git reset回退版本
git reflog查看命令历史
git rm将文件从暂存区和工作区中删除
git mv移动或重命名工作区文件
git checkout分支切换
git switch (Git 2.23 版本引入)更清晰地切换分支
git restore (Git 2.23 版本引入)恢复或撤销文件的更改

提交日志

命令说明
git log查看历史提交记录
git blame <file>以列表形式查看指定文件的历史修改记录

远程操作

命令说明
git remote远程仓库操作
git fetch从远程获取代码库
git pull下载远程代码并合并
git push上传远程代码并合并

实战

git reset命令

先用git log查看一下已有版本

$ git log --pretty=oneline
b65a6a5df0d0e5ddf4da1cccc641927eb3224b60 (HEAD -> master) Merge branch 'dev'
3f3bdf2adbefaa2595eb77cc0aa101ce925b3c17 修改代码
6b789116122f54f78987de07b339e13f6ce4a760 changed the text.txt
405fb585eb82853f878fa3381f2decd2572f1dc8 add text.txt
f7295fbd3e0f67be6a3264e9b8e58350649ae16c (tag: v1.0) 第一次版本提交

现在,我们要把当前版本Merge branch 'dev'回退到上一个版本修改代码,就可以使用git reset命令:

$ git reset --hard HEAD^
HEAD 现在位于 3f3bdf2 修改代码

看看text.txt的内容是不是优快云@keduo感谢你的关注

$ cat text.txt
优快云@keduo感谢你的关注

我们发现text.txt被还原了。

还可以继续回退到上一个版本changed the text.txt,不过且慢,让我们用git log再看看现在版本库的状态:

$ git log --pretty=oneline
3f3bdf2adbefaa2595eb77cc0aa101ce925b3c17 (HEAD -> master) 修改代码
405fb585eb82853f878fa3381f2decd2572f1dc8 add text.txt
f7295fbd3e0f67be6a3264e9b8e58350649ae16c (tag: v1.0) 第一次版本提交

最新的那个版本Merge branch 'dev'已经看不到了!

如果还想再回去最新的版本,该怎么办呢?

只要上面的命令行窗口还没有被关掉,你就可以顺着往上找,找到那个最新版本Merge branch 'dev'commit idb65a6a5···,于是就可以指定回到未来的某个版本:

$ git reset --hard b65a6a5
HEAD 现在位于 b65a6a5 Merge branch 'dev'

版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了。

再小心翼翼地看看text.txt的内容:

$ cat text.txt 
欢迎关注优快云@keduo
优快云@keduo感谢你的关注

Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向Merge branch 'dev'

在这里插入图片描述

改为指向修改代码

在这里插入图片描述

所以你让HEAD指向哪个版本号,你就把当前版本定位在哪个版本

那如果上面的命令行窗口已经被关掉了,但你想恢复到新版本却找不到新版本的commit id了怎么办?

当你用$ git reset --hard HEAD^回退到修改代码版本时,再想恢复到Merge branch 'dev',就必须找到Merge branch 'dev'commit id。Git提供了一个命令git reflog用来记录你的每一次命令:

$ git reflog
3f3bdf2 HEAD@{1}: reset: moving to HEAD^
b65a6a5 (HEAD -> master) HEAD@{2}: commit (merge): Merge branch 'dev'
3f3bdf2 HEAD@{3}: commit: 修改代码

终于舒了口气,从输出可知,Merge branch 'dev'commit idb65a6a5,现在,你又可以回到最新版本了。

撤销修改

今年除夕夜大家都放假了,但老板点名要你留在公司值班,这使的你十分气愤,于是在text.txt文件中抱怨了几句,在还git add到暂存区了。一段时间后,你的气消了,打算删掉之前的抱怨。

先查看一下文件内容:

$ cat text.txt 
欢迎关注优快云@keduo
优快云@keduo感谢你的关注
过年还要加班,真命苦啊!!!

git status查看一下,修改只是添加到了暂存区,还没有提交:

$ git status
位于分支 master
要提交的变更:
  (使用 "git restore --staged <文件>..." 以取消暂存)
	修改:     text.txt

Git告诉我们,用命令git restore --staged <文件>可以把暂存区的修改撤销掉,重新放回工作区:

$ git restore --staged text.txt
$ git status
位于分支 master
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git restore <文件>..." 丢弃工作区的改动)
	修改:     text.txt

修改尚未加入提交(使用 "git add" 和/或 "git commit -a"

Git同样告诉我们,使用 git restore <文件> 可以丢弃工作区的改动:

$ git restore text.txt
$ git status
位于分支 master
无文件要提交,干净的工作区

我们再来查看一下文件内容:

$ cat text.txt 
欢迎关注优快云@keduo
优快云@keduo感谢你的关注

文件内容恢复了,现在我们就完成了文件撤销操作。

删除文件

先添加一个新文件junk.txt到 Git 并提交:

$ touch junk.txt
$ git add junk.txt 
$ git commit -m "add junk.txt"
[master 8f43abc] add junk.txt
 1 file changed, 1 insertion(+)
 create mode 100644 junk.txt

在 Ubuntu 中创建文件有多种方法。

  1. 使用命令行创建文件

打开终端,输入以下命令来创建一个空白文件:

touch 文件名

例如,要创建一个名为 test.txt 的文件,可以输入以下命令:

touch test.txt
  1. 使用文本编辑器创建文件

Ubuntu 自带了许多文本编辑器,例如 Gedit 和 Nano。你可以使用这些编辑器来创建和编辑文件。

例如,要使用 Gedit 创建一个新文件,可以输入以下命令:

gedit 文件名

例如,要创建一个名为 test.txt 的文件,可以输入以下命令:

gedit test.txt

这将打开 Gedit 编辑器并创建一个新文件。

  1. 使用图形界面创建文件

如果你喜欢使用图形界面,也可以使用文件管理器(Nautilus)来创建文件。在文件管理器中,右键单击空白区域,选择“新建文档”然后选择所需的文件类型。

在文件管理器中文件删除文件junk.txt,或者用rm命令删除文件:

$ ls
junk.txt  README  text.txt
$ rm junk.txt
$ ls
README  text.txt

这个时候,工作区和版本库就不一致了,使用git status命令就可以知道文件的变动了:

$ git status
位于分支 master
尚未暂存以备提交的变更:
  (使用 "git add/rm <文件>..." 更新要提交的内容)
  (使用 "git restore <文件>..." 丢弃工作区的改动)
	删除:     junk.txt

修改尚未加入提交(使用 "git add" 和/或 "git commit -a"

此时,我们有两个选择:

  • 一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit

    $ git rm junk.txt 
    rm 'junk.txt'
    ubuntu@ubuntu:~/keduo$ git commit -m 'remove junk.txt'
    [master 813a93c] remove junk.txt
     1 file changed, 1 deletion(-)
     delete mode 100644 junk.txt
    
  • 另一种情况是删错了,可以使用git checkout -- <filename>从版本库中把误删的文件恢复到最新版本:

    $ git checkout -- junk.txt
    ubuntu@ubuntu:~/keduo$ ls
    junk.txt  README  text.txt
    

    注意:从来没有被添加到版本库就被删除的文件,是无法恢复的!

    恢复文件只能恢复到最新版本,即丢失最近一次提交后修改的内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值