Skip to content

平常在windows电脑上使用Git Extensions 工具比较多,大部分的常用指令都可以通过点点点就可以完成。在mac电脑上的话使用sourcetree工具。但有时候也会直接通过git命令,很多时候也是通过百度来临时查阅,所以总结下来方便自己,也方便可能需要的你。

1、基本命令

  • 1.1、 生成SSH公钥和私钥,公钥要复制配置到git服务器上,可通过Git Bash Here打开终端命令,前提需要安装git
    javascript
    // 查看ssh版本,同时判断ssh是否已经安装,安装git即可
    ssh -V
    
    // 生成SSH密钥
    ssh-keygen -o
    
    // 导航到指定目录
    cd ~/.ssh/
    
    // 查看ssh,id_rsa.pub则为公钥,id_rsa则为私钥,将公钥复制到git服务器
    ls
    
    // mac下可以用cat命令进行查看 .pub后缀名为公钥,另外一个为私钥,将公钥复制到服务器或者github或者code.aliyun.com上
    cat ~/.ssh/id_rsa.pub
  • 1.2、 git config 配置提交用户名和用户邮箱
    javascript
    git config --global user.name "aehyok"
    git config --global user.email "aehyok@163.com"
    
    // 配置好后可通过这个来查看
    git config -l
  • 1.3、 创建项目后如何提交到仓库
    javascript
    // 创建项目后到指定的项目文件夹中初始化git
    git init
  • 1.4、 将文件添加到暂存区
    javascript
    // 将添加或修改的文件提交到暂存区
    git add .
    
    // 将监控已经被add进暂存区的文件,会将被修改的文件再次提交到暂存区
    // 或者是
    git add -u
    
    // 则是git add .和 git add -u 两个命令的集合
    // 或者是
    git add -A
  • 1.5、 提交到本地仓库(即自己当前电脑的代码仓库)
    javascript
    // 提交到本地仓库
    git commit -m ' feat: 初始化项目'
    
    // commit提交时不进行检查husky钩子
    git commit --no-verify -m 'xxx'
  • 1.6、 设置远程仓库地址(即代码要提交到哪里的服务器)
    javascript
    // 当然也可以使用ssh 链接
    git remote add github.origin https://github.com/aehyok/demo.git
    
    // 移除远程仓库,默认名称为origin
     git remote rm origin
    
    // 重新设置远程仓库url
    
     git remote set-url origin git@github.com:aehyok/AK47-GPT.git
  • 1.6.1、获取远程仓库地址
    javascript
    // 获取远程仓库地址
    git remote -v
  • 1.7、 推送到远程服务器(注意一点,首次推送要设置追踪)
    javascript
    // 设置本地分支追踪远程分支、、、之后就可以直接git push
    git push --set-upstream origin main
  • 1.8、 修改文件名会忽略大小写,默认都是忽略了,所以修改文件名大小写是无效的
    javascript
    // (查看是否忽略大小写) true则设置了忽略
    git config core.ignorecase
    
    // 后面加上false则直接可设置不忽略,修改文件名大小写后会生效
    git config core.ignorecase false
  • 1.9、修改文件夹名字大小写的问题
    javascript
    // (修改前先将Test文件夹备份并修改为TestTemp<一个临时文件夹名字而已>,
    // 然后执行命令
    git rm Test
    // 再将备份文件夹名字修改为需要的文件夹即可
    --------------另外一种简单粗暴的方式-----------------
    // 还是先备份好要删除的文件,然后将文件删除,提交到仓库。
    // 完事后将备份的文件复制回来,然后修改文件大小写,再提交即可。
  • 1.10、 是将远程主机的最新内容拉到本地 ,用户在检查了以后决定是否合并到工作本机分支中。
    javascript
    git fetch
    //更多基本操作
    //https://www.cnblogs.com/runnerjack/p/9342362.html
  • 1.11、同样一个本地仓库可以设置多个远程仓库,然后通过不同的git push github.origin
    javascript
     // 设置个github远程仓库
     git remote add github.origin https://github.com/aehyok/demo.git
    
     // 设置个gitee远程仓库
     git remote add gitee.origin https://github.com/aehyok/demo.git
    
     // 推送到github
     git push github.origin
    
     //  推送到gitee
     git push gitee.origin
    
     // 移除远程仓库地址
     git remote rm gitee.origin
  • 1.12、克隆代码库
    javascript
     // 目前没指定分支,默认为master
     git clone https://github.com/aehyok/demo.git
    
     // 指定分支名称
     git clone -b dev  https://github.com/aehyok/demo.git
    
     // 克隆指定远程仓库下的指定分支(gitee.origin为git remote add 设置的别名)
     git clone gitee.origin  main
  • 1.13、git add . 时 vscode中警告 warning: LF will be replaced by CRLF in src/index.js.
    javascript
    
        // 查看当前设置
        git config core.autocrlf
    
        git config --global core.autocrlf false
  • 1.14、拉取远程分支代码到本地(拉取dev分支代码到本地的分支)
    javascript
        git fetch origin dev
        
        git pull origin dev
  • 1.15、如果新装电脑后使用git 操作代码可能会报错
    javascript
            // 升级了OpenSSH 后报错
            // Unable to negotiate with 47.98.49.44 port 22: no matching host key type found. Their offer: ssh-rsa
            // fatal: Could not read from remote repository.
            
            // Please make sure you have the correct access rights
            // and the repository exists.
      
      // 因为OpenSsh升级了,需要在xx/xx/xx/.ssh目录下添加config文件(没有后缀名) ,添加以下三行代码
        Host *
        HostkeyAlgorithms +ssh-rsa
        PubkeyAcceptedKeyTypes +ssh-rsa
  • 1.16、git log 详细操作

2、分支管理

  • 2.1、 创建分支
    javascript
    // 切换到基础分支
    git checkout main
    
    // 根据 切换到的main分支,创建dev分支并切换到dev分支
    git checkout -b dev
  • 2.2、 查看分支
    javascript
    // 查看本地分支
    git branch
    
    // 查看本地分支和远程分支,如果不存在需要git fetch一下
    git branch -a 
    
    // 查看远程分支
    git branch -r
  • 2.3、 修改分支名称
    javascript
    // 修改当前本地分支的名称
    git branch -m develop-lqm
    
    // 也可以修改指定的分支  原分支名称  新分支名称
    git branch -m develop-lam develop-lqm
  • 2.4、 删除本地分支和删除远程分支
    javascript
    // 先切换到其他分支
    git checkout dev
    
    // 删除本地分支
    git branch -d dev
    
    // 如果删除不了,可以进行强制删除
    git branch -D dev
    
    // 有必要的情况下,删除远程分支但是要谨慎使用
    git push origin --delete dev

3、合并代码

  • 3.1、 将某个提交,任何跟仓库所有分支的commit 合并到当前分支
    javascript
    // (正常情况直接合并成功,可能存在重复图需要手动解决)
    git cherry-pick  commitid
    
    // git多个commitid
    git cherry-pick  commitid commitid1 commitid2 commitid3
    // 正常情况直接push即可,手动解决冲突需要commit 再进行push
    git push
    
    // 扩展阅读:还可以一起提交commitid-A到commitid-B 之间所有的内容修改
    // http://www.ruanyifeng.com/blog/2020/04/git-cherry-pick.html
  • 3.2、 当前分支dev的代码提交push成功,此时想合并到main分支上
    javascript
    // 先切换到main分支
    git checkout main
    
    // 将dev分支的变更拉取到main分支上来
    git merge dev
    
    // 合并完成,即可推送到远程服务器
    git push -u origin main

4、tag标签(根据tag标签创建的分支不要与标签名一致)

  • 4.1、添加一个tag,并推送到远程仓库
    javascript
    git tag -a 3.11.3.001 -m "release 3.11.3.001"
    git push origin 3.11.3.001
  • 4.2、 删除一个tag
    javascript
    git tag -d 3.11.3.001
    git push origin :refs/tags/3.11.3.001
  • 4.3、 查看tag
    javascript
    git tag
  • 4.4、在某个commit上打tag
    javascript
    git tag test_tag c809ddbf83939a89659e51dc2a5fe183af384233    
    git push origin test_tag    //!!!本地tag推送到线上
  • 4.5、 根据tag创建分支
    javascript
    https://www.cnblogs.com/senlinyang/p/9455426.html
    git branch newbranch 3.11.3.001
    // 切换到分支
    git checkout newbranch
  • 4.6、删除已经push到服务器的提交记录,到某个commitid
    javascript
        1、找到想要退回到的那个commitid
        git log 
        2、然后将代码退回到那个commitid
        git reset --hard commitid
        3、推送到服务器,已经要加上--force
        git push origin HEAD:dev --force
  • 4.7、删除没有push到远程服务器的commit记录
    javascript
         1、通过找到想要退回到的commit_id
        git log 
         2、本地代码会变成你想要的那次代码。这次之后提交的代码都没有了
        git reset --hard id 
         3、完成撤销,停留在当前版本,之前的代码还是在的。只是本地的提交记录没了
        git reset id
  • 4.8、删除某个很多个提交
    javascript
        // 1、查看提交
        git log 
        // 2、列出最后的提交和commitid之间的所有提交
        // 然后把不需要的提交删除掉即可
        git rebase -i commitid
    
        // 3、推送(谨慎使用,尽量单独分支处理好后)
        git push -f

5、小技巧

  • 5.1、vscode中配置git bash 作为命令行

  • 5.2、在某个分支暂存某些临时代码(不方便提交的)

    javascript
        // 将当前代码状态暂时切换WIP
        git stash save '备注'
        // 执行后 Saved working directory and index state WIP on dev: b4d9dc5 feat: 合并行和列
        
        //要将工作目录下的所有变更保存到一个新的WIP stash中,包括未跟踪的文件
        git stash -u
    
        // 想恢复的话需要切换到之前的分支,然后再执行
        // 应用最近一次的stash
        git stash apply   
        // 应用指定stash, 先list
        git stash apply  stash@{0}  //apply后,list中还会存在
        // 或者 pop
        git stash pop stash@{0}  // pop后,list中不会存在
    
    
        //如果stash了多次,可通过list命令列出所有的stash
        git stash list
    
        // 如果都恢复完毕 可以使用clear进行清除
        git stash clear
    
        // 保存未跟踪的文件
        git stash push --include-untracked 
        //或者简写
        git stash push -u
  • 5.3、恢复commit提交 // https://mp.weixin.qq.com/s/LDxXR302F9G35x3uwHh0jg

    javascript
        // 最近一次的
        git reset --soft HEAD^
        git log //通过查看日志可以发现,已经commit,但没有push的代码已经返回到本地更改中, 而且git log中不会留下记录
    
    
        // 指定commitid的提交(最近一次的提交到指定的commitid) 所有更改
        git reset --soft commitid
        
        //如果没有push到远程服务器,直接push即可
        git push
    
        // 如果已经push到远程服务器,因为服务器与本地存在差异
        git push -f
    
        // 直接重置到commitid  一般慎用
        git reset --hard commitid
  • 5.4 如果是已经push的一个提交

        // 该提交已经被push到远程服务器, 使用后将删除所有的更改
        git reset --hard HEAD~1
    
        // 然后使用强制推送
        git push -f

6、合并代码

7、设置忽略文件

  • env文件设置忽略

    //.gitignore文件中添加一行  
        .env.*
    //在.gitignore文件中添加完之后,需要将git索引中的文件移除
        git rm --cached .env.*
  • 8、恢复文件

     // (如果还没有提交文件)撤销单个文件
     git restore file 
     git checkout -- file
    
     // 如果是多个文件的话
     git chekcout -- . 
    
     // 取消掉所有的更改
     git reset --hard
  • 9、设置git忽略

     // 会匹配根目录下的 /server 目录,也会匹配任何子目录下的     
     server
    
      // 设置根目录下的server文件夹
     server/