IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> Git工具 -> 正文阅读

[开发工具]Git工具

本文是廖雪峰官网 https://www.liaoxuefeng.com/wiki/896043488029600的学习记录

Git基本操作

  • 把当前目录编变成Git可管理目录
$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit

# 把当前目录编变成Git可管理目录
$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/
  • 将文件添加并提交至仓库(add、commit)

7hGBBF.png

# 将文件添加并提交至仓库
$ git add readme.txt
$ git commit -m "wrote a readme file"
[master (root-commit) eaadf4e] wrote a readme file
 1 file changed, 2 insertions(+)
 create mode 100644 readme.txt
  • 实时掌控仓库当前的状态
# 实时掌控仓库当前的状态
$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   readme.txt
  • 看具体修改了什么内容
# 看具体修改了什么内容
$ git diff readme.txt
diff --git a/readme.txt b/readme.txt
index 013b5bc..c91805e 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,3 @@
 Git is a distributed version control system.
-Git is free software.
\ No newline at end of file
+Git is free software.
+123123
\ No newline at end of file
  • 查看历史记录
# 查看历史记录
$ git log
commit 4406d221d0ddfbf8eeeebfa044f192b2253f86a7 (HEAD -> master)
Author: hppp <1499931489@qq.com>
Date:   Wed Jan 19 19:11:14 2022 +0800

    append GPL

commit 576de96e634b0bb2b05b1c4aa09d29b62667f8b2
Author: hppp <1499931489@qq.com>
Date:   Wed Jan 19 19:09:20 2022 +0800

    123123

commit 9bcf89537588a83c9c8083342f6a5c0fc2ec0e96
Author: hppp <1499931489@qq.com>
Date:   Tue Jan 18 09:27:24 2022 +0800

    worte a readme file
# 查看历史记录-简洁版
$ git log --pretty=oneline
4406d221d0ddfbf8eeeebfa044f192b2253f86a7 (HEAD -> master) append GPL
576de96e634b0bb2b05b1c4aa09d29b62667f8b2 123123
9bcf89537588a83c9c8083342f6a5c0fc2ec0e96 worte a readme file
  • 版本回退
# 将当前版本回退到上一个版本
$ git reset --hard HEAD^
HEAD is now at 576de96 123123
# 回到回退之前的版本
$ git reset --hard 4406
HEAD is now at 4406d22 append GPL
  • 查看文件内容
$ cat readme.txt
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
  • 丢弃(撤销)工作区的修改

两种情况:

  1. 修改后还没有放入暂存区,撤销修改就回到了鹤版本库一模一样的状态
  2. 已经添加到暂存区,又作了修改,撤销修改就回到了暂存区后的状态

总之,让该文件回到最近一次git commit或git add的状态

$ git checkout -- readme.txt

git checkout – file中的–十分重要,若无–,就变成了切换到另一个分支的命令

对于第二种清空,我们需要在使用上述命令前,使用git reset HEAD <file>,可以把暂存区的修改撤销掉(unstage),重新放回工作区。

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

Git添加远程库

  • 将本地仓库的内容推送到Github仓库

其中,origin是命名习惯

$ git init
$ git remote add origin git@github.com:ThePassedWind/learngit.git
  • 添加README.txt
$ git add README.txt
$ git commit -m "addREADME"
$ git push -u origin master
  • 删除远程库(如果添加的时候地址写错了)
$ git remote -v
$ git remote rm origin
  • 在初始化以后,每次添加文件只需如下操作
$ git add docName
$ git commit -m "meaning"
$ git push -u origin master

远程库克隆

  • 使用如下指令,可在当前目录下创建gitskills目录,包含了该远程库的所有内容
$ git clone git@github.com:ThePassedWind/gitskills.git
Cloning into 'gitskills'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (3/3), done.

注意:Github给出的地址有ssh鹤https等协议,但ssh协议速度最快

分支管理

一开始,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点:

7XOOfO.png

每次提交,master分支都会向前移动一步,随着不断提交,master分支的线不断变长

当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上:

7XOx6H.png

Git创建一个分支很快,因为除了增加一个dev指针,改改HEAD的指向,工作区的文件都没有任何变化

不过,从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变:

7XOzXd.png

假如我们在dev上的工作完成了,就可以把dev合并到master上。Git怎么合并呢?最简单的方法,就是直接把master指向dev的当前提交,就完成了合并:

7XOjpD.png

合并完分支后,甚至可以删除dev分支。删除dev分支就是把dev指针给删掉,删掉后,我们就剩下了一条master分支:

7XOv1e.png

实战练习:

  1. 创建dev分支,然后切换到dev分支

    $ git checkout -b dev
    Switched to a new branch 'dev'
    # 等价于两条命令
    $ git branch dev
    $ git checkout dev
    Switched to branch 'dev'
    # 创建并切换到新的分支,也可也使用switch
    $ git switch -c dev
    
  2. 查看当前分支

    $ git branch
    * dev
      main
    
  3. 添加提交操作

    $ git add readme.txt 
    $ git commit -m "branch test"
    [dev b17d20e] branch test
     1 file changed, 1 insertion(+)
    
  4. 切换回main分支

    $ git checkout main
    Switched to branch 'main'
    # 切换到已有的分支,也可以使用switch
    $ git switch main
    
  5. 将dev分支的工作成果合并到main分支上

    $ git branch -d dev
    Deleted branch dev (was b17d20e).
    
  6. 合并完成后,可以放心的删除dev分支

    $ git branch
    * main
    

解决冲突

当两个分支同时进行修改时,我们为了避免冲突,需要删除一共分支。

  1. 创建新的分支feature1,然后修改readme.txt的内容

    $ git switch -c feature1
    Switched to a new branch 'feature1'
    

    修改readme.txt为Creating a new branch is quick AND simple.

  2. 在feature1分支上提交

    $ git add readme.txt
    
    $ git commit -m "AND simple"
    [feature1 14096d0] AND simple
     1 file changed, 1 insertion(+), 1 deletion(-)
    
  3. 切换到master分支

    如下,可以看到Git自动提示我们当前master分支比远程的master分支超前1个提交

    $ git switch master
    Switched to branch 'master'
    Your branch is ahead of 'origin/master' by 1 commit.
      (use "git push" to publish your local commits)
    

    修改readme.txt为Creating a new branch is quick & simple.

  4. 添加并提交

    $ git add readme.txt 
    $ git commit -m "& simple"
    [master 5dc6824] & simple
     1 file changed, 1 insertion(+), 1 deletion(-)
    
  5. 此时master分支和feature1分支各自都分别有新的提交,Git无法执行快速合并,只能试图把各自的修改合并起来,但这种合并就可能会有冲突。

    $ git merge feature1
    Auto-merging readme.txt
    CONFLICT (content): Merge conflict in readme.txt
    Automatic merge failed; fix conflicts and then commit the result.
    
  6. 通过git status查看冲突的文件

    $ git status
    On branch master
    Your branch is ahead of 'origin/master' by 2 commits.
      (use "git push" to publish your local commits)
    
    You have unmerged paths.
      (fix conflicts and run "git commit")
      (use "git merge --abort" to abort the merge)
    
    Unmerged paths:
      (use "git add <file>..." to mark resolution)
    
    	both modified:   readme.txt
    
    no changes added to commit (use "git add" and/or "git commit -a")
    

    查看readme.txt的内容

    Git is a distributed version control system.
    Git is free software distributed under the GPL.
    Git has a mutable index called stage.
    Git tracks changes of files.
    <<<<<<< HEAD
    Creating a new branch is quick & simple.
    =======
    Creating a new branch is quick AND simple.
    >>>>>>> feature1
    
  7. 查看分支合并情况(git log)

    $ git log --graph --pretty=oneline --abbrev-commit
    *   cf810e4 (HEAD -> master) conflict fixed
    |\  
    | * 14096d0 (feature1) AND simple
    * | 5dc6824 & simple
    |/  
    * b17d20e branch test
    * d46f35e (origin/master) remove test.txt
    * b84166e add test.txt
    * 519219b git tracks changes
    * e43a48b understand how stage works
    * 1094adb append GPL
    * e475afc add distributed
    * eaadf4e wrote a readme file
    
  8. 删除feature1分支

    $ git branch -d feature1
    Deleted branch feature1 (was 14096d0).
    

当Git无法自动合并分支时,必须解决冲突,即删除一个分支,之后才能合并完成。

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-01-28 12:07:31  更:2022-01-28 12:09:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 10:13:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码