• Git常用命令


    老师文档
    https://gitee.com/houdunren/code/blob/master/docs/Git.md

    git --vension 看git版本

    cd 进入家目录

    mkdir edu 新建edu文件夹

    ls / ll / dir / ls -a (-a可以看到隐藏的文件) 查看文件夹下的所有文件

    ls 查看出来的文件,前面是第一个是-的,说明是文件,如果是d开头的,说明是文件夹
    

    rm -rf edu 强制删除edu文件夹

    rm -rf * 强制当前目录里所有的文件和文件夹

    pwd 看当前的文件所在的路径

    chmod -R 777 ./edu 加权限

    git config --global user.email 'whm2416@qq.com'

    git config --global user.name 'haima1004'

    这里是声明全局的名字

    执行上面的两条命令后,在cd回车,进入家目录

    cat .gitconfig 就可以查看刚新建的全局配置文件了.

    .gitconfig里记录的就是上面声明的邮箱和名字
    vim .gitconfig 可以编辑这个文件 (要在家目录里执行这个命令)
    编辑完后,esc退出 -> shift+; -> wq 保存并退出
    

    在git文件夹里输入 git init 在你要新建版本库的文件夹里创建一个初例化的仓库

    git config user.email '228654416@qq.com'
    git config user.name 'haima'
    ls -a
    cat config 
    
    这样在git文件夹里就声明了当前仓库的用户信息
    

    新建项目时.

    在干净的文件夹里输入命令 `git init`
    建好文件后就会有一个.git的隐藏文件,如果把它删除了,就会断开git的连接
    

    管理线上已经有的项目时

    在干净的文件夹里输入命令`git clong 加https`里的仓库地址
    

    git的基本工作流程

    提交代码的流程:
    本地编辑完后,add. 添加到运输车,然后再commit -m "操作说明" 到本地的版本仓库
    然后再git push到线上的代码仓库里.
    

    工作流程

    touch a.php 新建文件,
    git add a.php 放入小推车
    git status 查看工作环境:
    有红色的文件,就是没有提交到运输车里的文件,没有版本控制的文件
    vim b.php  >  i > 输入文字 > shift+; > wq 
    git status 查看工作环境:
    绿色的文件,就是已经放到运输车里的的文件,但是也是没有版本控制的
    有红色的文件,就是没有提交到运输车里的文件,没有版本控制的文件
    

    git add b.php 把b.php文件也放入小推车里. 
    git add . 是一次把所有的文件都放入到小推车里
    git status 查看工作环境,此时都是绿色的文件了,说明都放入到小推车里了.
    git commit -m '提交说明'  把小推车里的文件提交到本地仓库里.
    git status 查看此时工作环境就是干净的了.
    

    此后再修改完文件后,重复上面的步骤,提交到本地仓库里.
    

    vim .gitignore 新建忽略配置文件

    在.gitignore文件里添加规则, 
    *.txt 忽略所有的.txt格式的文件,忽略后add . 命令就是不会提交到小推车里.
    !a.txt 除了a.txt文件不忽略.
    /vendor/*.php    忽略vendor目录里的.php格式的文件
    /vendor/*        忽略vendor目录里的所有文件
    /vendor/**/*.php 忽略vendor目录及子文件里的所有.php格式的文件
    /vendor          忽略vendor的文件夹.
    
    线上的代码仓库一般大概会给一个G左右的空间
    
    
    在git里如果是空文件夹默认不会跟踪.
    git status也是看不到的,所以文件夹里必需有文件,并且文件没有被忽然的,才能被提交小推车里.
    
    mkdir vendor 建新vendor文件夹,
    touth vendor/a.txt 在vendor文件夹里新建a.php文件
    git status 如果vendor没有被.gitignore忽略,就可以看到vendor文件夹了.
    

    删除仓库里的文件

    1.删除仓库里的文件,本地的文件同时也会被删除
    如果有些文件错放入仓库里的了,想要称除它.
    git rm a.txt 这样本地和代码库里的文件就都会被删除.(默认本地和仓库里的代码应该是同样的).
    
    ![](https://img2018.cnblogs.com/blog/1441611/201903/1441611-20190301071425638-810451420.png)
    
    2.只删除仓库里的vendor/b.php,本地的vendor/b.php保留
    git rm --cached ./vendor/b.php 
    git rm --cached -r vendor 只删除仓库里的文件,本地的vendor保留
    git status 查看本地的vendor文件夹会被跟踪,认为没有在版本里
    

    删除暂存区(提交车)里的文件

    当文件提交到暂存区,还没有commit时,发现文件提交错了
    可以把文件撤消回来
    git reset HEAD a.php //只撤消a.php
    git reset HEAD * //撤消所有
    git checkout -- c.php //还原c.php到最初状态(没有修改之前的状态).
    
    git reset hard 864b3c6 //恢复到864b3c6版本
    

    改名字

    git mv a.php b.php //把本地的a.php改为b.php
    git add 'b.php' //改完后再添加到运输车里
    git commit -m 'change b.php' //提交改完后的b.php到仓库里
    

    查提交的日志

    git log //看提交信息
    git log -p //看提交的详细信息
    git log -p -1 //看最后一次提交的信息.
    git log -p 2  //看最后二次提交的信息.
    git log --oneline //看简短的文件变化信息
    git log --oneline -p //看简短的详细点的文件变化信息
    git log --name-log  //查看文件的发生变化
    git log --name-status //查看文件发生了什么变化,是add 还是删除了
    git log --name-only 看最近提交的文件
    git reflog //查看简短提交信息
    

    修改提交的备注

    把本次更改的文件合并到上次提交的日志里
    把更改的文件git add . 件提交到运输车后
    git commit --amend //进入vim编辑器后,修改上次提交的备注.
    保存退出后.就样就把本次更改的文件合并到上次提交里了.
    不会另创一条提交日志了
    

    git命令全局别名

    git config --global alias.a add . //给add . 启个a别名
    其实操作的就是家目录里的.gitconfig文件.
    我们可以直接去到家目前里用vim修改它
    cd 回车
    vim .gitconfig
    [alias]
        a = add .
        c = commit  //没有添加-m,所以直接git c时会自动进入vim编辑提交的说明
        l = log
        s = status
    保存退出
    

    系统Alias

    在家目录里 ls -a可以看到 ~/.bash_profile 文件,
    在它里面写上,此时就定义了系统别名,之前定义的全局依然生效

    alias gs="git status"
    alias gc="git commit -m "
    alias gl="git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit  "
    alias gb="git branch"
    alias ga="git add ."
    alias go="git checkout" 
    

    标准的分支操作工作流

    分支的原理

    当开发新功能时可以新建分支,在分支里开发完成后,把最终版再合并到master上,测试没有问题了,就可以pull到服务器的主要线了    
    
    查看分支
    git branch //查看本地的分支
    git branch -a //查看所有分支(本地加线上) 
    
    创建本地分支
    git branch ask //创建ask分支(就是复制一份master主线的代码到ask分支上)
    
    切换分支
    git checkout ask //切换到ask分支 
    在ask分支上操作的代码不会影响到master分支,它们是各自独立的
    git checkout -b bbs //创建并切换到bbs分支上
    
    合并分支
    当bbs分支的代码开发完后,切到master主分支上
    git merge ask  //合并bbs分支的代码到master主分支上
    
    解决冲突问题
    当两个分支(这里以ask和bbs两个分支为例),都修改了同一个文件时,他们都合并到到master主分支上时,
    就会产生冲突,此时就会在解决冲突的状态下.按提示手动修改冲突的文件.再重新提交到仓库里.
    

    查看已经合并的分支
    git branch --merged //显示分出来的所有分支里面的代码都是一致的.
    
    查看没有合并的分支
    git branch --no-merged //此时就举看到没有合并的分支
    
    删除分支
    git branch -d bbs //删除bbs分支(如果是没有合并的分支是删除不了的)
    git branch -D bbs //大D可以强制删除没有合并的分支(慎用大D)
    git push origin --delete 线上支付的名字 
    ![](https://img2018.cnblogs.com/blog/1441611/201912/1441611-20191220205451315-2102057746.png)
    

    暂存区

    1.查看暂存区列表
    git stash list 
    
    2.保存到暂存区
    git stash //把已经add.到运输车里的文件(还没有commit),保存到暂存区
    当编辑完文件后,没有 `add .` 添加到提交车里前,或者没有commit前,不许切换到别的分支的.
    此时可以先保存到暂存区里,再切换到别的分支,把别的分支里的事件处理完后,
    再回到此分支里恢复暂存后,再删除暂存就可以了.
    

    3.恢复暂存区
    git stash apply
    恢复暂存区后,暂存区里的文件依然存在,需要手动删除
    
    4.恢复暂存区,并删除暂存区里的暂存
    git stash pop
    
    5.删除暂存区
    git stash drop stash@{0} //删除暂存区0号文件
    

    标签

    git tag //看标签列表
    git tag 1.0 //把当前代码打上1.0的版本
    git tag 2.0 //把当前代码打上2.0的版本
    当完成一个功能模块后(测试稳定了),想要发布后,可以打上标签.
    
    git tag -a tagName -m "my tag" //带备注的tag
    git show tagName   //查看tag详细信息
    git push origin [tagName] //将tag同步到远程服务器
    git tag -d v0.1.2  //删除本地tag标签
    git push origin :refs/tags/v0.1.2  //删除远程tag标签
    
    
    更多详情:
    https://www.jianshu.com/p/cdd80dd15593    
    

    生成zip代码发布压缩包

    git archive master --prefix='haima/' --form=zip > haimamaster.zip
    此时会把所有master主分支里的文件放在haima文件夹里,然后压缩成haimamaster.zip文件
    

    rebase

    git rebase master //把指针指向在master的最新提交点
    
    场景,在master主分支创意ask分支,当ask分支改变内容后commit时,同时master主分支的内容也改变了,
    此时在master主分支上合并ask分支的代码就会产生冲突.这时只能由master管理来解决冲突问题了.
    这样是不合理的.
    
    解决方式:
    当ask分支改变内容后,添加->提交 
    git add . 
    git commit -m 'edit ask'
    git rebase master //把指针指向在master的最新提交点 
    git checkout master 再切到master主分支上
    git merge ask  此时就不会再产生冲突了
    


    创建新仓库(github上)

    这里有两种方式:
    1.本地已经有项目代码时,在线上创建一个干净的没有提交的项目.
        关联远程
        创建本地库并完成初始提交
    
        echo "# hd-xj" >> README.md
        git init
        git add README.md
        git commit -m "first commit"
        添加远程仓库
        
        git remote add origin git@github.com:houdunwang/hd-xj.git
        
        查看远程库
        
        git remote -v
        
        推送数据到远程仓库
    
        第一次推送数据到线上仓库,线上仓库里没有当前推送的这个新分支,需要加-u,(这时就会在线上新建这个分支,推并关联它)
        git push -u origin master
    
        第二次再推送数据时
        git push 即可
    
        
        删除远程仓库关联
        
        git remote rm origin
    
    2.本地没有代码时,把线上的代码 用`git clong 项目ssh地址` 命令克隆到本
    通过 clone 克隆的仓库,本地与远程已经自动关联,上面几步都可以省略。
    

    生成秘钥

    使用ssh连接Github发送指令更加安全可靠,也可以免掉每次输入密码的困扰。
    
    在命令行中输入以下代码(windows用户使用 Git Bash)
    ` ssh-keygen -t rsa -C “YOUR_EMAIL@YOUREMAIL.COM”`
    一直按回车键直到结束。系统会在~/.ssh 目录中生成 id_rsa和id_rsa.pub,即密钥id_rsa和公钥id_rsa.pub。
    把公钥放到线上的仓库里,就ok了.
    
    详细参考:
    `https://cloud.tencent.com/developer/article/1343014`
    

    向GitHub添加秘钥

    clone https 的方式下载的代码,配置公钥后,pull/push数据还是要输入账号密码

    解决方法:

    vim .git/config
    url = https://gitee.com/haima1004/layhm.git 替换为
    url = git@gitee.com:haima1004/layhm.git
    

    测试是否配置成功

    完成后可以在命令行测试是否配置成功,首次建立链接会要求信任主机

    ssh -T git@github.com //github

    ssh -T git@gitee.com //码云

    在服务器添加完公钥后报错
    sign_and_send_pubkey: signing failed: agent refused operation

    haima@haima-PC:~/go/src/haimait/gin_web$ ssh -T git@github.com
    sign_and_send_pubkey: signing failed: agent refused operation
    Permission denied (publickey).
    haima@haima-PC:~/go/src/haimait/gin_web$ eval "$(ssh-agent -s)"
    Agent pid 25192
    haima@haima-PC:~/go/src/haimait/gin_web$ ssh-add
    Identity added: /home/haima/.ssh/id_rsa (/home/haima/.ssh/id_rsa)
    haima@haima-PC:~/go/src/haimait/gin_web$ ssh -T git@github.com
    Hi haimait! You've successfully authenticated, but GitHub does not provide shell access.
    

    提交代码到远程仓库

    提交代码之前一定要把git pull origin master //先把线上的代码更新下来
    
    先把代码commit到本地的仓库里,
    git push origin master //提交到线上的仓库里
    
    如果向远程仓库推送代码没有反应,可以清空~/.ssh 目录中的 known_hosts文件里的内容,再重新生成并添加密钥到仓库里,就可以了
    

    本地分支与GITHUB远程分支同步

    1.创建远程ask分支
    在本地ask分支环境上,
    git push --set-upstream origin ask
    本地ask分支创建远程ask分支,并关联远ask程分支,并推关本地ask分支代码送到远程ask分支上 
    
    2.删除远程ask分支
    git push origin --delete ask
    
    3.删除本地ask分支
    git branch -d ask
    git branch -D ask //强行删除没有合并的ask分支
    

    pull 拉取代码

    拉取远程主机某个分支的更新,再与本地的指定分支合并。

    克隆完线上的仓库下来后,本地只有一个master
    
    1.git pull origin ask:ask
    此时本地就把线上的ask分支的代码也拉取下来了,本地就是ask分支了
    
    2.拉取origin主机的ask分支与当前分支合并 git pull origin ask
    3.如果远程分支与当前本地分支同名直接执行 git pull
    

    push 提交代码到远程仓库

    git push命令用于将本地分支的更新,推送到远程主机。它的格式与git pull命令相似。

    将当前分支推送到origin主机的对应分支(如果当前分支只有一个追踪分支 ,可省略主机名)
    
    git push 
    
    使用-u选项指定一个默认主机 ,这样以后就可以不加任何参数直播使用git push。
    
    $ git push -u origin master
    
    删除远程ask分支 git push origin --delete ask
    
    ![](https://img2018.cnblogs.com/blog/1441611/201912/1441611-20191220205511006-1684164123.png)
    
    
    本地ask分支关联远程分支并推送 git push --set-upstream origin ask
    

    本地关联远程分支

    例:使用场景:远程仓库里已经有dev代码 本地也有dev代码 但是还没有添加上关联
    
    git branch --set-upstream-to=origin/远程要关联的分支名 本地分支名称
    
    git branch --set-upstream-to=origin/dev dev
    

    管理远程分支

    1、查看项目的分支们(包括本地和远程)

     命令行 : $ git branch -a
    

    2、删除本地分支

    $ git branch -d <分支的名字>

    3、删除远程分支

     命令行 : $ git push origin --delete <BranchName>
    

    4、查看删除后分支们

     命令行 : $ git branch -a
  • 相关阅读:
    linux 系统函数 basename和dirname
    写linux脚本你怎么能不知道位置参数!?
    Linux 使用中history 默认记录数不够用了?
    在C/C++中常用的符号
    java23种设计模式之一: 策略模式
    工作中用到的git命令
    注解@Aspect实现AOP功能
    AOP 面向切面 记录请求接口的日志
    javaWeb导出POI创建的多个excel的压缩文件
    nginx的重试机制以及nginx常用的超时配置说明
  • 原文地址:https://www.cnblogs.com/haima/p/10454394.html
Copyright © 2020-2023  润新知