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

     
  • 相关阅读:
    Haskell Interactive Development in Emacs
    Access Java API in Groovy Script
    手工设置Eclipse文本编辑器的配色
    Color Theme of Emacs
    Gnucash的投资记录
    Special Forms and Syntax Sugars in Clojure
    Use w3m as Web Browser
    SSE指令集加速之 I420转BGR24
    【图像处理】 增加程序速度的方法
    TBB 入门笔记
  • 原文地址:https://www.cnblogs.com/nafio/p/9549761.html
Copyright © 2011-2022 走看看