zoukankan      html  css  js  c++  java
  • Git 笔记

    初始化一个Git仓库,使用 git init 命令。

    添加文件到Git仓库,分两步:

    1. 使用命令 git add <file> ,注意,可反复多次使用,添加多个文件;
    2. 使用命令 git commit -m <message> ,完成。
    $ git add file1.txt
    $ git add file2.txt file3.txt
    $ git commit -m "add 3 files."

     git status 命令可以让我们时刻掌握仓库当前的状态,

    如果 git status 告诉你有文件被修改过,用 git diff 可以查看修改内容。

    版本回退(使用 git reset 命令):

     git log 命令显示从最近到最远的提交日志  

    $ git log
    commit 243198cacee550cf478f4abf8b04eee9b5245f62 (HEAD -> master, origin/master)
    Author: eleven-123 <1782981957@qq.com>
    Date:   Fri Feb 15 18:31:45 2019 +0800
    
        edit readme.txt
    
    commit 1df583dc9ab58c0400080014a0d9d194eff91688
    Author: eleven-123 <1782981957@qq.com>
    Date:   Fri Feb 15 14:49:19 2019 +0800
    
        add readme.txt
    
    commit df066b8f3529d2d910627ac8791f9232602efc4e
    Author: _vicky <30923911+eleven-123@users.noreply.github.com>
    Date:   Fri Jan 4 10:44:16 2019 +0800
    
        Initial commit

    如果嫌输出信息太多,看得眼花缭乱的,可以试试加上 --pretty=oneline 参数:

    $ git log --pretty=oneline
    243198cacee550cf478f4abf8b04eee9b5245f62 (HEAD -> master, origin/master) edit readme.txt 1df583dc9ab58c0400080014a0d9d194eff91688 add readme.txt df066b8f3529d2d910627ac8791f9232602efc4e Initial commit

    *注:243198...的是commit id(版本号)

    在Git中,用HEAD表示当前版本,也就是最新的提交 243198... 

    上一个版本就是 HEAD^ ,上上一个版本就是 HEAD^^ ,当然往上100个版本写 100个^ 比较容易数不过来,所以写成 HEAD~100 ,

    例如:退回上个版本

    $ git reset --hard HEAD^

    $ git reset --hard HEAD~1

    然后我们再用 git log 再看看现在版本库的状态:

    $ git log
    commit 1df583dc9ab58c0400080014a0d9d194eff91688 (HEAD -> master)
    Author: eleven-123 <1782981957@qq.com>
    Date:   Fri Feb 15 14:49:19 2019 +0800
    
        add readme.txt
    
    commit df066b8f3529d2d910627ac8791f9232602efc4e
    Author: _vicky <30923911+eleven-123@users.noreply.github.com>
    Date:   Fri Jan 4 10:44:16 2019 +0800
    
        Initial commit

    如果,又想回去到未回退之前状态呢???

    第一种情况:上面的命令行窗口还未被关闭,找到你想指定的版本 commit id 

    $ git reset --hard 2431
    HEAD is now at 243198c edit readme.txt

     $ git log
     commit 243198cacee550cf478f4abf8b04eee9b5245f62 (HEAD -> master, origin/master)
     Author: eleven-123 <1782981957@qq.com>
     Date: Fri Feb 15 18:31:45 2019 +0800

     edit readme.txt

     commit 1df583dc9ab58c0400080014a0d9d194eff91688
     Author: eleven-123 <1782981957@qq.com>
     Date: Fri Feb 15 14:49:19 2019 +0800

     add readme.txt

     commit df066b8f3529d2d910627ac8791f9232602efc4e
     Author: _vicky <30923911+eleven-123@users.noreply.github.com>
     Date: Fri Jan 4 10:44:16 2019 +0800

     Initial commit

    第二种情况:命令行窗口已被关闭:

    Git提供了一个命令 git reflog 用来记录你的每一次命令:

    $ git reflog
    1df583d (HEAD -> master) HEAD@{0}: reset: moving to HEAD^
    243198c (origin/master) HEAD@{1}: reset: moving to 2431
    1df583d (HEAD -> master) HEAD@{2}: reset: moving to HEAD~1
    243198c (origin/master) HEAD@{3}: reset: moving to 2431
    1df583d (HEAD -> master) HEAD@{4}: reset: moving to 1df5
    df066b8 HEAD@{5}: reset: moving to HEAD~2
    243198c (origin/master) HEAD@{6}: pull: Fast-forward
    1df583d (HEAD -> master) HEAD@{7}: reset: moving to HEAD^
    243198c (origin/master) HEAD@{8}: pull: Fast-forward
    1df583d (HEAD -> master) HEAD@{9}: reset: moving to HEAD^
    243198c (origin/master) HEAD@{10}: reset: moving to 2431
    1df583d (HEAD -> master) HEAD@{11}: reset: moving to 1df5
    df066b8 HEAD@{12}: reset: moving to HEAD^^
    243198c (origin/master) HEAD@{13}: reset: moving to 24319
    1df583d (HEAD -> master) HEAD@{14}: reset: moving to HEAD^
    243198c (origin/master) HEAD@{15}: pull: Fast-forward
    1df583d (HEAD -> master) HEAD@{16}: reset: moving to HEAD^
    243198c (origin/master) HEAD@{17}: reset: moving to HEAD
    243198c (origin/master) HEAD@{18}: commit: edit readme.txt
    1df583d (HEAD -> master) HEAD@{19}: commit: add readme.txt
    df066b8 HEAD@{20}: initial pull
    $ git reset --hard 2431
    HEAD is now at 243198c edit readme.txt
    
    $ git log --pretty=oneline
    243198cacee550cf478f4abf8b04eee9b5245f62 (HEAD -> master, origin/master) edit readme.txt
    1df583dc9ab58c0400080014a0d9d194eff91688 add readme.txt
    df066b8f3529d2d910627ac8791f9232602efc4e Initial commit

      

    工作区与暂存区

    Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念。 

    工作区(Working Directory)

    就是你在电脑里能看到的目录,比如我的 learngit 文件夹就是一个工作区:

    版本库(Repository)

    工作区有一个目录 .git ,这个不算工作区,而是Git的版本库。

    Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支 master ,以及指向 master 的一个指针叫 HEAD 。

     

    我们把文件往Git版本库里添加的时候,是分两步执行的:

    第一步: git add 把文件添加进去,实际上就是把文件修改添加到暂存区;

    第二步: git commit 提交更改,实际上就是把暂存区的所有内容提交到当前分支。 

    因为我们创建Git版本库时,Git自动为我们创建了唯一一个 master 分支,所以 git commit 就是往 master 分支上提交更改。

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

    撤销修改

    1. 当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令 git checkout -- file 。
    2. 当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,① 用命令 git reset HEAD file ,file就回到了工作区,② 按1操作 git checkout -- file
    3. 已经提交了不合适的修改到版本库时,想要撤销本次提交,可以版本回退,不过前提是没有推送到远程库。

    删除文件

    在Git中,删除也是一个修改操作

    一般情况下,通常直接在文件管理器中把没用的文件删了,或者用rm命令删了: 

    $ rm test.txt

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

    $ git status
    On branch master
    Changes not staged for commit:
      (use "git add/rm <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
    
        deleted:    test.txt
    
    no changes added to commit (use "git add" and/or "git commit -a")

    现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令 git rm 删掉,并且 git commit :

    $ 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

    另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:

    $ git checkout -- test.txt

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

    注意:命令 git rm 用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,但你会丢失最近一次提交后你修改的内容

    克隆 

     git clone 命令克隆

    分支创建与合并 

    Git鼓励大量使用分支:

    查看分支: git branch 

    创建分支: git branch <name> 

    切换分支: git checkout <name> 

    创建+切换分支: git checkout -b <name> 

    合并某分支到当前分支: git merge <name> 

    删除分支: git branch -d <name> 

    解决冲突

    当Git无法自动合并分支时,就必须首先解决冲突。Git用 <<<<<<< , ======= , >>>>>>> 标记出不同分支的内容

    解决冲突后,再提交,合并完成。

    解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。

    用 git log --graph 或 git log --graph --pretty=oneline 命令可以看到分支合并图。

  • 相关阅读:
    持续交付11-构建和部署的脚本化
    腾讯云即时通讯IM 公共整合
    腾讯云应用生成 UserSig
    「USACO 2020 US Open Platinum」Exercise
    async要点
    jQuery实现textarea高度根据内容自适应
    背景图片设置透明度而不改变内容
    input type=file实现图片上传,预览以及图片删除
    vant 字体图标不显示问题
    vue项目使用mock.js
  • 原文地址:https://www.cnblogs.com/vicky123/p/10383470.html
Copyright © 2011-2022 走看看