美文网首页GitGit使用
git常用命令备忘

git常用命令备忘

作者: Leoshi | 来源:发表于2017-03-18 23:56 被阅读60次

    Refer:廖雪峰的Git教程

    git init    # 初始化
    git add  # 添加文件
    git commit -m "first version"  # 提交
    
    git status  # 查看当前状态
    git diff file.name  # 查看文件修改情况
    git log --pretty=oneline  # 查看日志
    
    git reset --hard HEAD^  # 强制回退到上一版本
    git reset --hard 543264  # 回退到某一版本
    git reflog   # git命令记录
    
    
    工作区与暂存区

    需要注意的是:
    第一次修改 -> git add -> 第二次修改 -> git add -> git commit

    git checkout -- file.name    # 放弃工作区修改
    
    

    命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

    • readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
    • readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

    总之,就是让这个文件回到最近一次git commit或git add时的状态。

    用命令git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区。

    rm file.name    # 删除文件
    git rm file.name    # 在git中删除文件
    checkout -- file.name  # 恢复文件
    
    git remote add https://github.com/jlshix/flaskweb.git  # 添加远程库
    git push -u origin master  # 第一次推送至远程库
    git push origin master    # 推送至远程库
    git clone https://github.com/jlshix/flaskweb.git    # 克隆远程库
    # Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快
    
    head & master Dev
    git checkout -b dev    # 新建并切换到dev分支  相当于以下两条
    git branch dev
    git checkout dev
    
    git branch # 查看分支
    git checkout master  # 切换回master分支
    git merge dev  #   将dev分支合并
    git branch -d dev  # 删除dev分支
    
    merge conflict
    合并分支时若出现冲突需要手动合并,然后
    git add git commit 解决冲突

    使用git log --graph --pretty=oneline --abbrev-commit查看分支图

    分支管理,禁用fastforward

    $ git checkout -b dev
    Switched to a new branch 'dev'
    
    $ git add readme.txt 
    $ git commit -m "add merge"
    [dev 6224937] add merge
     1 file changed, 1 insertion(+)
    
    $ git checkout master
    Switched to branch 'master'
    
    $ git merge --no-ff -m "merge with no-ff" dev
    Merge made by the 'recursive' strategy.
     readme.txt |    1 +
     1 file changed, 1 insertion(+)
    
    $ git log --graph --pretty=oneline --abbrev-commit
    *   7825a50 merge with no-ff
    |\
    | * 6224937 add merge
    |/
    *   59bc1cb conflict fixed
    
    no fastforward

    在实际开发中,我们应该按照几个基本原则进行分支管理:

    首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;

    那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;

    你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了.

    所以,团队合作的分支看起来就像这样:

    group programming

    使用git stash命令可以保存当前工作空间

    $ git stash
    Saved working directory and index state WIP on dev: 6224937 add merge
    HEAD is now at 6224937 add merge
    
    
    $ git stash list
    stash@{0}: WIP on dev: 6224937 add merge
    git stash pop
    $ git stash apply stash@{0}
    

    开发一个新feature,最好新建一个分支;

    如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。

    关于协作

    • 查看远程库信息,使用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 tag <name>用于新建一个标签,默认为HEAD,也可以指定一个commit id
    • git tag -a <tagname> -m "blablabla...可以指定标签信息
    • git tag -s <tagname> -m "blablabla...可以用PGP签名标签
    • 命令git tag可以查看所有标签

    操作标签

    • 命令git push origin <tagname>可以推送一个本地标签
    • 命令git push origin --tags可以推送全部未推送过的本地标签
    • 命令git tag -d <tagname>可以删除一个本地标签
    • 命令git push origin :refs/tags/<tagname>可以删除一个远程标签

    附赠:Git Cheat Sheet

    git-cheat-sheet

    相关文章

      网友评论

        本文标题:git常用命令备忘

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