zoukankan      html  css  js  c++  java
  • git常用命令

    (1)安装:

    1,ubuntu安装

    添加源并安装:

    #add-apt-repository ppa:git-core/ppa //配源

    # apt update; //更新源

    # apt install git

    (2)配置Git

    git config 用户配置文件路径:~/.gitconfig

    列出当前配置信息:git config --list

    配置当前用户名:git config --global user.name "testuser"

    配置当前用户邮箱:git config --global user.email "testuser@qq.com"

    (3)创建git仓库

    有两种取得 Git 项目仓库的方法,仓库后缀为:.git ,仓库的信息保存在.git文件夹中。

    ①在现有项目或目录下导入文件到 Git 中。

        新建仓库    git init

        导入仓库: git add (file)

    示例:

    1,创建文件夹

    mkdir test_dir_repo

    2,新建测试文件

    touch 1 2 3

    3,新建仓库

    git init #执行本步,目录下创建.git文件。此时,该目录就是一个git仓库。

    4,向仓库导入文件

    git add 1 #添加文件1,其实是添加到暂存区;

    git add 2 #此处也可以用[git add .] 提交当前目录。

    5,git commit #提交到仓库。

    ②从一个服务器克隆一个现有的 Git 仓库。

    git clone url(链接)

    1,创建文件夹

    mkdir test_dir_repo

    2,此时在线克隆的同时创建git仓库。

    (4)基本命令

    1,git status #当前状态

    2,git add  #添加到暂存区

    3,git commit #提交

    4,替换git commit编辑器:

    git config core.editor vim #临时替换

    git --global config core.editor vim #永久替换

    5,git commit

    git commit -m "commit message" #增加提交,生成commit-id

    说明:使用此命令不用再跳转到输入commit信息的编辑器了。

    6,git log

    解释:查看提交历史,同时可以获得commit-id;但看不到被删除的commitid。

    ①git log --pretty=oneline #log显示为一行,看起来简洁明了。

    ②git log --pretty=oneline --graph #以图像的形式查看,当分支多时,效果很好。

    ③git reflog #查看所有分支的所有操作记录(包括已被删除的 commit 记录和 reset操作)

    可以恢复到被删除的那个版本

    7,git show commit-id  

    展示版本内容/提交信息;

    ※使用commit-id最少提供4个字符。

    8,git rm #移除

    git rm 1 #删除文件1,提交到暂存区

    git commit #提交后,彻底删除。

    9,git mv #移动

    git mv 1.txt 2.txt #重名名1.txt为2.txt;提交到暂存区。

    git commit #提交后,文件重命名成功。

    10,git diff

    ①git diff #工作区的差异,即:会显示所有的文件变更差分。

    ②git diff --cached #暂存区的差异,即暂存区与本地工作目录的差异。

    ③git diff (commit id) (commit id)  #比较两次commit的差异

    ④git diff file名 #显示某个文件的差异

    11,git clean

    解释:清除当前工作区未被git版本控制的文件;即未执行git add等操作的文件。

    git clean -df #可以删除所有未git的文件;当然此时也可以用linux的rm删除。

    12,.gitignore (隐藏文件)

    解释:指定要忽略的故意未跟踪文件

    应用场景:在项目开发过程中,可能会产生一些不需要加入git控制的文件,但是我们不能删除它。

    说明:.gitignore放在当前git仓库根目录下(与.git同级)。

    使用方法(例):

    touch .gitignore

    git add .gitignore

    git commit -m "test .gitignore"

    vim .gitignore文件 #在此文件中,输入忽略的文件名。(文件名后不能有空格,一行一个)

    然后:git add .gitignore

    git commit -m "test .gitignore ignore filename"

    再查看:git status #不愿git的文件,不会显示为红色;和其它git管理的文件一致。

    ★可以隐藏某种类型的文件,如(*.xml),只需在.gitignore中输入*.xml即可。

    13,HEAD 头部

    解释:

    HEAD 文件是一个指向你当前所在分支的引用标识符 ;

    指向你正在其基础上进行工作的提交记录;

    HEAD是一个文件,指向当前的提交记录;

    位于.git目录下;

    指向关系:.git/HEAD -> refs/heads/master -> a60562sh9

    查看:.git/HEAD

    13.1 HEAD 扩展

    • 符号 ^ (shift + 6) :根据^的个数,查看前面若干个提交;
    • 符号 ~ (shift + `):用于查看跨度较大的父提交时使用;例:不能打100个^号。

      ※缺点时不能查看Merge的父提交。

    • detach 分离:例如做了git checkout HEAD~2操作,此处将处于分离状态;如果

      此时做了一系列修改和切换操作,想再返回detach状态,可执行:git checkout detach;或者通过get reflog信息(commit-id)返回。

    例:

    查看前一个提交:git show HEAD^ #也是第一个父提交;

    查看第1个父提交的父提交:git show HEAD^^

    查看Merge前的第2个父提交: git show HEAD^2

    查看第2个父提交的父提交:git show HEAD^2^

    查看第2个父提交:git show HEAD~2

    查看第3个父提交:git show HEAD~3

    查看第100个父提交:git show HEAD~100

    14,git checkout commit-id (检出)

    切换分支:git checkout branchname #检出指定的提交记录到工作目录。

    git checkout master:切换到master分支;

    它与git reset的区别是:切换到某个提交记录后,历史记录还存在,还可以返回。

    15, git reset

    git reset commit-id (重置)

    解释:撤销之前的提交记录。

    假如有1,2,3这3条记录,如果git reset 2;那么3的记录将删除。

    进一步解释,下面是提交的三个过程:

    1、工作目录新建文件 a

    2、使用git add把a加入到暂存区

    3、使用git commit把a提交到本地仓库

    不带参数,直接执行完git reset之后,相当于撤销了2,3两步,第一步创建的文件a还在当前工作目录中。

    git reset参数

    ①git reset --soft "commit id"

        回退git commit

    ②git reset (--mixed) "commit id" #不带参数的默认行为

        回退git commit,回退git add

    ③git reset --hard "commit id"

        回退git commit,回退git add,回退工作区修改

    git reset 恢复

    git reset --soft "commit id"的恢复:再执行git commit(文件名);但此时的commit id已改变。

    git reset --mixe "commit id"的恢复:git add (文件名);git commit(文件名)#commit id已变

    git reset --hard "commit id" && git reflog #reflog就是HEAD的变化Log.

    commit-id HEAD  动作

    4220bf5 HEAD@{0}:  reset: #状态2

    cc29b12 HEAD@{1}:  commit: 3 #状态3

    git reset --hard cc29b12 #相当于回到了commit3, 撤销了撤销动作,其实就是恢复。

    解释:执行git reset --hard "状态2的commit id" 回到了状态2,此时状态3已被删除。

    通过git reflog查到状态3的commit id,再执行git reset --hard "状态3的commit id",相当于又恢复到了状态3,commit id不变。

    git reset 与 git checkout的区别

    ※此处的安全指恢复的难易度。

    ※For 文件:对当前工程的单个文件进行操作,此时不能加参数。

    16,git checkout -- <file>

    丢弃工作区的修改

    case 1 : 没有加入暂存区

    git checkout -- file 相当于从本地仓库获取内容到工作目录,此时工作区的修改将因覆盖而被丢弃。

    case 2:加入暂存区

    git checkout -- file 相当于从暂存区获取内容到工作目录,即add到暂存区后的本地修改将因覆盖而被丢弃。

    17,git revert (重新提交)

    18,分支 (branch)

    Git 的分支,其实本质上仅仅是指向提交对象的可变指针。 

    master:为git默认分支

    branch:为新建分支

    18.1创建分支

    git branch 查看分支

    git branch branch1 //创建branch1分支,但HEAD还在master分支上;

    git checkout -b branch1 //创建branch1分支,同时HEAD转移到branch1分支上;

    19,git merge (合并)

    ①git checkout master //先切换到master分支

    ②git merge branch1 //再合并branch1到master,此时为重新生成一个新的提交。

    20,git rebase(变基)

    21,git cherry-pick

    22,conflict (冲突)

    解释:当两个分支对同一个文件同一行做出了修改,就会产生冲突。

    解决冲突后,继续提交的方法:

    ①git merger 继续提交:git add;git commit

    ②git rebase 继续提交:git add;git rebase --continue

    ③git cherry-pick 继续提交:git add;git cherry-pick --continue

    此时,还有小问题,无论如何都提交,再使用:git commit --allow-empty 可以完成提交。

    23,git branch 参数

    查看所有分支:git branch -a(all)

    git branch -D branch_01 删除分支 #若当前HEADER在branch_01上,则不能删除;需先切换分支

    git branch -vv 显示详细信息

    git branch -u  跟踪分支

    24,git 重写历史 

    修改最后一次的提交message:git commit --amend

    例:git commit --amend -m "新的commit Message" 

    修改中间某次的提交message:git rebase -i HEAD~*    //*号用具体的数字。

    此时,将显示提交信息,对内容做如下修改:

    ①edit:编辑某个提交内容,则会修改此提交内容

    ②删除一行:删除某个提交记录,则删除那个提交

    ③squash:压缩提交,即将多个提价合并成一个提交。

    25,git stash (隐藏)

    git stash:在切换分支前,隐藏暂未提交的改动

    git stash list:显示隐藏

    git stash pop:弹出隐藏

    git stash apply:应用隐藏,此时并没有弹出;即在stash list还存在。

    git stash --all:隐藏目录下所以改动

    26,git bundle (打包)

    说明:打包git仓库。

    打包:git bundle create [*.bundle] HEAD [branch name]

    [*.bundle]:为打包后生成的bundle名;例:test.bundle

    [branch name]:被打包的分支名;例:master,branch01

    例:git bundle create test.bundle HEAD master

    解包:git clone *.bundle #把打包的仓库解压出来

    例:git clone test.bundle

    27,git patch(补丁)

    •git diff:制作补丁  通用的patch  git apply:打补丁

    git diff [commitid] [commitid] > [test.patch] 例:git apply test.patch

    特点:不会自动提交;轻便;不够详细

    •git format-patch:制作补丁 git专用补丁 git am:打补丁

    git format-patch [commit-id] [-number] #对于该commit-id 向前数第number个提交。

    打入某个提交的补丁;会自动提交这个补丁的内容

    特点:很详细;文件比较多

    28,git tag (标签)

    新建标签:git tag [tag name] 例:git tag version01

    显示全部标签:git tag

    显示标签内容:git show [tag name]

    轻量级标签:git tag [tag name]

    附注标签:git tag -a [tag name] -m [message]

    删除标签:git tag -d [tag name]

    29,远程仓库

    ①git remote 命令:显示远程仓库  #origin为默认远程仓库

    ②添加远程仓库 #把远程仓库添加到本地;

    git remote add <remote repo> <url> #<remote repo>为远程仓库名在本地的名称(可与远程仓库相同,也可以启个别名);<url>为远程仓库的url.

    ③添加远程仓库分支

    git branch <new branch> #new branch为新建分支名称;

    git push <remote repo> <new branch> #<remote repo>为远程仓库名。

    ④移除远程仓库

    git remote rm <remote repo>

    ⑤移除远程仓库分支

    git push <remote repo> --delete <branch>

    30,git push (推)

    基本命令: git push <remote name> <local branch>:<remote branch>

    例:git push orange master:master #本地和远程都是master分支。

    作用:把本地的修改推到远程仓库,并把相应的本地远程仓库分支更新到最新。

    31,git fetch(取)

    基命令:git fetch <remote name> <remote branch> #<remote name>为远程仓库名称;

    作用:获取远程仓库的更新到本地远程仓库分支,本地分支不变

    32,git pull (拉取)

    基本命令:git pull <remote name> <remote branch>

    作用:拉取远程仓库的更新,并和本地仓库当前分支合并

    ★git pull扩展

    git pull = git fetch + git merge

    例:

    git pull origin master

    git fetch origin master

    git merge origin/master

    git pull --rebase #以rebase的方式拉取。

    33,分支跟踪

    解释:某一个本地分支 跟踪 某一个远程分支。

    git clone后,本地master分支会跟踪远程master分支。

    Git 能自动地识别去哪个服务器上抓取、合并到哪个分支。

    git checkout -b <new_branch> <remote/branch> 新建分支并设置远程跟踪分支

    例:git checkout -b branch1 orange/branch1 #本地branch1跟踪远程branch1.

    此时,git pull将直接从远程branch1拉取数据。

    git branch -u <remote/branch> 在已有的分支上设置远程跟踪分支

    git branch -vv 显示所有分支 并显示是否存在远程跟踪分支

    34,ssh key秘钥

    ssh的方式拉取远程代码,配置后操作不再需要输入用户名密码。

    命令:ssh-keygen -t rsa -C "email"

        生成sshkey 在~/.ssh/id_rsa.pub

        把id_rsa.pub里面的内容拷贝到相应的代码管理工具的Add new sshkey

    ※加入ssh key后 push代码的时候不需要输入github账户名密码。

    35,git clone扩展

    git clone的实际动作如下:

    ①创建新目录

    ②git init

    ③git remote add origin "git clone后面的url"

    ④git fetch #拉取远程仓库的所有内容

    ⑤git checkout -b master origin/master #新建本地master跟踪origin/master

    36,git远程操作

    37,git blame <file> (责备)

    使用场景:

    当我们想看某一文件的某一行的出处时,就可以使用git blame

    例:git blame file.cc

    38,git bisect (二分查找)

    git bisect start 开始查找

    git bisect good <commit id> 开始时 标记好的commit

    git bisect bad <commit id> 开始时 标记有问题的commit

    git bisect good/bad       查找时 标记是否有问题

    git bisect reset 恢复到查找前的状态

    39,gitk

    历史查看器

    sudo apt-get install gitk

    40,git gui

    提交工具

    sudo apt-get install git-gui

  • 相关阅读:
    3. docker-compose实战--ghost app
    3. nacos服务发现
    1. nacos初识, 和eureka的比较, 在docker上安装nacos
    2.nacos服务配置中心
    如何将PHP对象数组转换成普通数组
    php 通过变量 来调用函数
    linux svn
    Sublime text 3安装svn插件
    php 字符串 定界符 json_last_error()
    centos7 rm -rf 删除文件的找回
  • 原文地址:https://www.cnblogs.com/mountain2011/p/12483346.html
Copyright © 2011-2022 走看看