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

    一 设置Git的user name和email:

    $ git config --global user.name "xuhaiyan"
    $ git config --global user.email "haiyan.xu.vip@gmail.com"

    git config --list 查看配置信息

    二 生成SSH密钥过程:

    1.查看是否已经有了ssh密钥:cd ~/.ssh
    如果没有密钥则不会有此文件夹,有则备份删除
    2.生存密钥:
    $ ssh-keygen -t rsa -C “email@email.com”
    按3个回车,密码为空。
    (email@email.com是github的账号,即上面的email)
    生成的id_rsa和id_rsa.pub
    id_ras.pub中的key需要复制下来,在git Server上填写(比如github上)

    三 在要保存工程的位置

    git init 建立 .git文件

    四 addFile提交文件到stage,从stage中清除文件

    git add -A 提交所有变化
    git add -u 提交被修改(modified)和被删除(deleted)文件,不包括新文件(new)
    git add . 提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件

    git add fileA fileB fileC 多个文件

    git add dir 会提交整个目录包括子目录

    git stage跟git add功能完全相同,区别是前者名字起的贴切。。

    git reset fileA  是 git add的相反操作,清除掉stage中的fileA,(实际操作就是是从库区head恢复到statge,如果库区没有fileA这个文件,那么这个操作就是无效的 )

    eg:

    如果新建了fileA

    add,然后git state 发现  fileA是 新增Add状态

    使用git ls-files --stage 发现里面有fileA

    git reset A 后 git state 中是未跟踪状态

    git ls-files --stage中不包含fileA

    git rm --cached fileA  据说除了删stage还会删库区的fileA,但工作区的fileA不会改变,这时fileA实际变成了未跟踪状态

    git rm fileA 与上面类似,但是会吧工作区的fileA也删除

    git checkout --fileA  从stage恢复到workspace

    五 commit

    git commit -m "log"
    git commit -a -m "log"
    git commit -a是把unstaged的文件变成staged(这里不包括新建(untracked)的文件),然后commit,
    一般都不推荐使用git commit -a,还是推荐先git add再git commit。

    六 版本回退

    git reset --soft --mixed --hard 3参数用法

    https://www.cnblogs.com/nafio/p/9925575.html

    git reset --hard xxxx到任意位置

     https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013744142037508cf42e51debf49668810645e02887691000

    七 push

    设置origin关键字替代目标地址,关联远程库

    git remote add origin git@github.com:yourusername/test.git 
    git push -u origin master  这句可以用来代替上面--set-upstream那句,第一次上传master是null的需要加-u,之后就不需要-u了

    git remote -v 查看远程库信息,可以查看可抓取和推送的远程地址 

    git remote add origin git@github.com:yourusername/test.git 设置的关联就可以用上面命令查到

     取消这个关联使用

    git remote remove origin

    八 clone

    git clone ssh://example.com/~/www/project.git

     clone时git自动把本地master和远程master分支对应

    指定路径

    git clone git@github.com:xxxxx/xxx.git  d:/ngspace/xx/

    指定用户名,密码

    原始git地址 https://xxxx/test.git

    指定用户名,密码后

    git clone https://用户名:密码@xxxx/test.git

    小技巧

    任意文件夹或任意位置(不需要先建立git init)直接 用上面指定路径的方法clone工程,可以避免多级同名目录的问题

    比如在d:/ng/  下执行git init  然后git clone git@github.com:xxxxx/xxx.git  

    会在d:/ng/下生成一个.git  ,然后还会在d:/ng/ng/下生成一个.git

    九 pull

    git pull  从远端仓库提取数据并尝试合并到当前分支

    已经clone完的工程使用pull

    git pull <远程主机名> <远程分支名>:<本地分支名>
    git pull origin next:master

     

    十 创建,查看,切换分支

    原理

    https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001375840038939c291467cc7c747b1810aab2fb8863508000

    创建分支

    方法1 git checkout -b  branch1 创建分支branch1并切换到这个分支

    方法2 git branch branch1    创建分子branch1

              git checkout branch1       切换分支

    这里注意git checkout --fileName 是从缓存恢复到工作区

    切换时要进入到下载的具体分支文件夹中操作

    eg:文件夹结构a/b  git init,git clone都在a中操作,然后下载下来b文件夹,切branch时要cd到b在checkout

    创建远程分支

    本地创建分支后

    git push origin branchLocalName:branchRomateName

    查看分支

    git branch 查看本地分支(首先需要cd到具体工程目录中)

    git branch -a 查看本地和远程所有分支

    git branch -s 查看本地分支

    git branch -r 查看远程分支

    切换分支

    git checkout branch1

    合并分支

    git merge branch1  把branch1合并到当前分支上(这里注意,想合并到哪个分子就要先切换到这个分支然后merge)

    如果有冲突,解决完冲突后,需要再次add并commit

    git merge --no-ff -m "xxxx"  branch1

    通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。

    如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息

    如果才用 ff 模式的,则直接把 master 的指针直接指向了 dev 分支的最新提交,这样两个分支的最新提交的 commit id 就是一样的。

    如果采用 --no-ff 模式合并分支,由于不能直接把 master 指针直接指向 dev 分支的最新提交, master 分支只能进行一次提交操作,所以就会有内容一模一样,commit id 不同的问题。

    简单地说就是 -no-ff 模式进行了一次新的 git commit 操作。

    这也是为什么采用 -no-ff 模式要加入参数 -m 的原因

    冲突

    冲突后,回到冲突前

    git merge --abort

    删除分支

    git branch -d fileA  合并分支后,被合并的分支一般就没用了,可以直接删除,对git来说只是清空指针的操作,成本低

    git branch -D fileA 强行删除(未合并过的)分支

    十一 其他命令

    安装lfs,用于上传大文件,否则速度慢

    https://blog.csdn.net/wifi74262580/article/details/85060187

    对每个仓库 git lfs install

    然后依次添加需要追踪的大文件类型

    git lfs track "*.mp4"

    然后记得把.gitattributes commit上去

    git add .gitattributes

    git commit -m "xxxxx"

    --set-upstream用法关联本地远程分支,本地新建的分支如果与远程分支建立关联

    就可以直接使用git push ,git pull 不需要多余参数

    如果不使用这个参数做关联,push,pull就需要每次加参数

    比如 git pull <remote> <branch>

    一些情况

    eg1:首次推送本地master到远端

    git push --set-upstream git@github.com:OnafioO/xxxx.git master(注意最后这个master指的是本地)

    也可以用下面替代,下面会自动建立到master的关联

    git remote add origin git@github.com:yourusername/test.git 
    git push -u origin master(第一次加-u)

    用完上面两种方法之一,下次再push,直接就git push,不需要加其他参数

    如果git retmote add时设置的地址错了,可以用下面方法修改

    git remote rm origin
    git remote add origin git@github.com:Liutos/foobar.git

    eg2:新建dev分支,拉取远端dev分支

    如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令

    git branch --set-upstream-to=origin/dev dev

    然后就可以直接使用git push,git pull来操作dev分支,不需要额外参数

    取消分支关联

    git branch --unset-upstream [<branchname>]

    git stash 把工作区和暂存区临时存起来

    git stash save 同上

    git stash list 查看所有缓存

    git stash apply 从最后一个缓存恢复到工作区,恢复后stash内容不删除

    git stash apply@{0}    恢复序号为0的那个缓存,具体序号可以通过git stash list查看到

    git stash pop 从最后一个缓存恢复到工作区,回复后stash内容删除

    git stash drop 删除最后的stash

    git stash clear 清理所有

    git log 查看每次修改

    git log --pretty=oneline 查看修改,把每次修改信息显示成一行 

    git log --graph 可以看到分支合并图

    git log --graph --pretty=oneline --abbrev-commit   

    最后面-abbrev-commit作用:Git 可以为你的 SHA-1 值生成出简短且唯一的缩写。如果你传递 --abbrev-commit 给 git log 命令,输出结果里就会使用简短且唯一的值;它默认使用七个字符来表示,不过必要时为了避免 SHA-1 的歧义,会增加字符数

    git reflog 用来记录每一次命令 ,这个可以配合git reset 使用,用来查下恢复版本 

    git tag tagname 默认把tag打在当前Head上  也可以git tag tagname f52c633 把tag打到某一个commit id上

    git tag -a tagname -m "info" 当前tag加个注释

    git tag 查看tag  或者 git show tagname查看某个具体tag

    git tag -d v1.0 删本地tag

    git push origin v1.0 推送到远端

    git push origin --tags 一次性推送

    git push origin :refs/tags/v0.9 删除远端tag

    命令行下对比基本没鸟用,随手记录

    git diff 显示当前工作区的文件和stage区文件的差异

    git diff --staged 显示stage区和HEAD的文件的差异

    git diff HEAD 显示工作区和上次递交文件的差异

    git ls-files --stage 查看缓存区文件index内容

    使用git ls-files指令可以查看指定状态的文件列表,格式如下:

    #查看指定状态的文件
    git ls-files [-z] [-t] [-v] (--[cached|deleted|others|ignored|stage|unmerged|killed|modified])* (-[c|d|o|i|s|u|k|m])

    git clean -df   移除所有未跟踪文件,-d标识包含目录,-f强制清除

    十二 github上传

    …or create a new repository on the command line

     
    echo "# Test0" >> README.md
    git init
    git add README.md
    git commit -m "first commit"
    git remote add origin git@github.com:xxxx/Test0.git
    git push -u origin master
    

    …or push an existing repository from the command line

    git remote add origin git@github.com:xxxx/Test0.git
    git push -u origin master

    子模块下载

    git submodule init

    git submodule update

     
  • 相关阅读:
    手机端阻止页面滑动-模板
    window.location各个属性-笔记
    面向对象的编程思想
    异步执行原理
    移动端rem布局实现(vw)
    用css3实现摩天轮旋转的动画效果
    js如何从一个数组中随机取出n个不同且不重复的值
    js数组中如何去除重复值?
    各大主流流浪器的内核是什么?
    javascript数组常用方法
  • 原文地址:https://www.cnblogs.com/nafio/p/9549761.html
Copyright © 2011-2022 走看看