美文网首页
github使用

github使用

作者: kxmile | 来源:发表于2018-12-21 01:00 被阅读0次
    #生成秘钥
    ssh-keygen -t rsa -C "your@qq.com" -b 4096
    #查看秘钥
    cat ~/.ssh/id_rsa.pub
    #取消文件模式不同
    git config --add core.filemode false
    #忽略文件
    .gitignore
    #配置文件位置
    .git/config
    #查看分支作者
    git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)' | sort -k5n -k2M -k3n -k4n
    

    简写

    git config --global alias.st status
    git config --global alias.unstage 'reset HEAD'
    git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
    
    #配置个人信息
    git config --global user.name "Your Name"
     git config --global user.email "email@example.com"
    

    基础操作

    #初始化
    git init
    #查看状态
    git status
    #追加文件到暂存区
    git add file.txt
    #提交
    git commit -m " 备注信息"
    

    文件变动

    #查看文件变化内容 工作区与暂存区
    git diff file.txt
    # 暂存区 与版本
    git diff --cached
    git diff  --staged
    
    -----------------------版本库--------------------------------------------
                                             |                           |
                                     git diff --cached           
                                             |                           |
    -------------暂存区----------------------       git diff HEAD
                            |                                            |
                         git diff                                      
                            |                                            |
    -----工作区--------------------------------------------------------------
    

    版本回退

    # 同步远程分支记录到本地
    git remote update origin --prune
    #查看版本
    git log
    git log --pretty=oneline
    #回退上个版本
     git reset --hard HEAD^
    git reset --hard c6bab6
    #查看全版本
    git reflog
    

    文件切换

    git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令

    要提交的变更:
      (使用 "git reset HEAD <文件>..." 以取消暂存)
    
        修改:     already-add.txt
    
    尚未暂存以备提交的变更:
      (使用 "git add <文件>..." 更新要提交的内容)
      (使用 "git checkout -- <文件>..." 丢弃工作区的改动)
    
        修改:     untrack.txt
    
    
    # 删除文件
    git  rm trash.txt
    #回退删除
     git checkout --  trash.txt
    
    #查看仓库
     git remote -v
    #添加仓库
     git remote add origin
    #由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
    git push -u origin master
     git push origin master
    
    #新增分支dev,并且跳到dev
    git checkout -b dev
    #当前dev分支 作一次提交,只有东西提交了 commit才会记录
    git commit -m "dev first"
    #切到master
    git checkout master
    #查看所有分支
    git branch -a
    
    # 当前master ,合并dev分支
    git merge dev 
    # 删除dev分支
    git branch -d dev
    
    #查看分支
    git branch
    #创建分支
    git branch <name>
    #切换分支
    git checkout <name>
    #创建+切换分支
    git checkout -b <name>
    #合并某分支到当前分支
    git merge <name>
    #删除分支
    git branch -d <name>
    
    git log --graph --pretty=oneline --abbrev-commit
    
    #通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
    
    #如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
    git merge --no-ff -m "merge with no-ff" dev
    
    

    关于git stash

    #存储本地工作环境
    git stash
    #查看列表
    git stash list
    #恢复方式1
    git stash apply
    git stash drop
    #恢复方式2
    git stash pop
    
    工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:
    一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
    另一种方式是用git stash pop,恢复的同时把stash内容也删了:
    
    $ git stash list
    stash@{0}: WIP on dev: f52c633 add merge
     git stash apply stash@{0}
    
    • 未被追踪的文件:指的是新建的文件或文件夹且还没加入到暂存区(新建的还没有被git add 过得)
    • 未加入到暂存区的文件:指的是已经被追踪过,但是没有加入到暂存区(已经执行过git add/commit的但是这次修改后还没有git add)

    举例:
    readme.md 已经被git add/git commit过,但是呢 我这次只是修改了,而且没有修改完,不能commit
    test 新建的文件夹,没有被git add/git commit
    有个急事需要处理,这时候我需要切换分支,去处理紧急任务,比如文中的举例去修改bug,正确的步骤:
    git add test(让git去追踪这个新文件)
    git stash保留现场
    如果我不执行这两个命令,那么我在修改BUG完成之后
    git status,就会发现readme.md没有添加到暂存区,同时又多了个test文件,但是自己的readme.md没有完成,万万不可以提交,这样导致bug的修改代码也提交不了。所以你需要
    git stash,这样你在提交修改bug代码的时候 ,就不会看见readme.mdtest。可以安心提交修改bug的代码。

    为什么要用stash?一开始,我也觉得没必要,直接切换分支,再回来是一样的啊。
    然后测试了一把,就知道原因了。
    情景如下:
    1、在dev分支,创建一个新文件test6.txt。并add它,让它stage。
    2、这时切回master分支,你会看到这个test6.txt居然也在master分支里。但它实际上是属于dev分支的。怎么办?
    3、git stash就有作用了。切回dev分支,执行git stach。这时git bash会告诉你
    “Saved working directory and index state WIP on newF2: b63fbcb add test6.txt
    HEAD is now at b63fbcb add test6.txt”。它已经把test6.txt的现场保存好了。
    4、这时你在切回master分支,test6.txt就消失了。
    现在懂了吧。。。。为什么要用git stash。
    
    另外:没有被stage或者head的文件,是无法被 stash的。而且会显示在各个分支里。让你迷惑它到底该属于哪个分支。
    所以stash起作用的全是stage 或者 head 的文件。理论来自官网,“也就是你修改过的被追踪的文件和暂存的变更——并将它保存到一个未完结变更的堆栈中,随时可以重新应用。”
    
    开发一个新feature,最好新建一个分支;
    
    如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。
    
    现在,你的小伙伴要在dev分支上开发,就必须创建远程origin的dev分支到本地,于是他用这个命令创建本地dev分支:
    $ git checkout -b dev origin/dev
    
    git pull也失败了,原因是没有指定本地dev分支与远程origin/dev分支的链接,根据提示,设置dev和origin/dev的链接:
    $ git branch --set-upstream-to=origin/dev dev
    Branch 'dev' set up to track remote branch 'dev' from 'origin'.
    
    查看远程库信息,使用git remote -v;
    
    本地新建的分支如果不推送到远程,对其他人就是不可见的;
    
    从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
    
    在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
    
    建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;
    
    从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。
    
    因此,多人协作的工作模式通常是这样:
    首先,可以试图用git push origin <branch-name>推送自己的修改;
    如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
    如果合并有冲突,则解决冲突,并在本地提交;
    没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!
    如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>。
    这就是多人协作的工作模式,一旦熟悉了,就非常简单。
    
     git rebase
    rebase操作可以把本地未push的分叉提交历史整理成直线;
    rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。
    
    #用于新建一个标签,默认为HEAD,也可以指定一个commit id;
    git tag <tagname>
    #可以指定标签信息;
    git tag -a <tagname> -m "blablabla..."
    #可以查看所有标签。
    git tag
    #查看标签信息
    git show <tagname>
    

    相关文章

      网友评论

          本文标题:github使用

          本文链接:https://www.haomeiwen.com/subject/duepkqtx.html