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

    1.git cherry-pick git cherry-pick可以理解为”挑拣”提交,它会获取某一个分支的单笔提交,并作为一个新的提交引入到你当前分支上。 当我们需要在本地合入其他分支的提交时,如果我们不想对整个分支进行合并,而是只想将某一次提交合入到本地当前分支上,那么就要使用git cherry-pick了。

    git cherry-pick [<options>] <commit-ish>...
    常用options:
            --quit                退出当前的chery-pick序列
            --continue            继续当前的chery-pick序列
            --abort               取消当前的chery-pick序列,恢复当前分支
            -n, --no-commit       不自动提交
            -e, --edit            编辑提交信息

    git cherry-pick commitid 在本地仓库中,有两个分支:branch1和branch2,将branch2分支上的第一次提交内容合入到branch1分支上,则可以使用git cherry-pick命令:

    git cherry-pick 2555c6e

    将commitid为2555c6e的提交合入到当前分支,当cherry-pick时,没有成功自动提交,这说明存在冲突,因此首先需要解决冲突,解决冲突后需要git commit手动进行提交;或者git add .后直接使用git cherry-pick --continue继续。

    git cherry-pick -n: 如果不想git cherry-pick自动进行提交,则加参数-n即可。比如将branch2分支上的第三次提交内容合入到branch1分支上:

    git cherry-pick -e: 如果想要在cherr-pick后重新编辑提交信息,则使用git cherry-pick -e命令.

    git cherry-pick –continue, –abort,–quit:

    当使用git cherry-pick发生冲突后,这时如果要继续cherry-pick,则首先需要解决冲突,通过git add .将文件标记为已解决,然后可以使用git cherry-pick --continue命令,继续进行cherry-pick操作。如果要中断这次cherry-pick,则使用git cherry-pick --quit,这种情况下当前分支中未冲突的内容状态将为modified,如果要取消这次cherry-pick,则使用git cherry-pick --abort,这种情况下当前分支恢复到cherry-pick前的状态,没有改变。

    git cherry-pick < branchname >:

    如果在git cherry-pick后加一个分支名,则表示将该分支顶端提交进cherry-pick:

    git cherry-pick ..< branchname > git cherry-pick ^HEAD < branchname >

    以上两个命令作用相同,表示应用所有提交引入的更改,这些提交是branchname的祖先但不是HEAD的祖先,比如,现在我的仓库中有三个分支,其提交历史如下图:

    C<---D<---E  branch2
                  /
    master   A<---B  
                  
                   F<---G<---H  branch3
                             |
                             HEAD

    如果我使用git cherry-pick ..branch2或者git cherry-pick ^HEAD branch2,那么会将属于branch2的祖先但不属于branch3的祖先的所有提交引入到当前分支branch3上,并生成新的提交,执行命令如下: git cherry-pick ..branch2, 执行后的提交历史如下:

    C<---D<---E  branch2
                  /
    master   A<---B  
                  
                   F<---G<---H<---C'<---D'<---E'  branch3
                                              |
                                             HEAD

    2.git fetch

    $ git fetch<远程主机名>//这个命令将某个远程主机的更新全部取回本地
    如果只想取回特定分支的更新,可以指定分支名:
    $ git fetch <远程主机名> <分支名> //注意之间有空格
    最常见的命令如取回origin 主机的master 分支:
    $ git fetch origin master
    取回更新后,会返回一个FETCH_HEAD ,指的是某个branch在服务器上的最新状态,我们可以在本地通过它查看刚取回的更新信息:
    $ git log -p FETCH_HEAD
    
    git pull可以理解为git fetch + merge命令:
    git fetch origin master //从远程主机的master分支拉取最新内容 
    git merge FETCH_HEAD    //将拉取下来的最新内容合并到当前所在的分支中
    
    git fetch -p 获取远程仓库的新分支以及删除远程仓库已删除的分支

    3.git tag

    4.git merge后想要重新回到merge之前的版本:

    第一步:git checkout到你要恢复的那个分支上
    git checkout develop
    第二步:git reflog查出要回退到merge前的版本号
    git reflog
    第三步:git reset --hard [版本号]就回退到merge前的代码状态了
    git reset --hard f82cfd2
    1. git commit中message的写法规范

    查看当前分支所有提交的commit的message: git log HEAD --pretty=format:%s 过滤, 仅显示功能分支feature相关的: git log <last release> HEAD --grep feature

    1. git stash

    假如现在的Bug你还没有解决,而上边又给你派了一个新的Bug,而这个Bug相比较现在正在苦思冥想的Bug比较容易解决。

    你想先解决新的Bug,可是之前的Bug还没有解决完而不能提交。怎么办?

    首先你需要将此刻正在解决Bug的当前分支“储藏”起来。例假如此时正在你在当前分支dev上已进行了Bug修改但还未提交。

    此时你想去解决刚派下来的另一个Bug。而你需要在master分支上去修复这个Bug,第一步就需要先切换到master 分支。当你执行 $ git checkout master 命令的时候,将提示出错:

    error: Your local changes to the following files would be overwritten by checkout: readme.txt Please commit your changes or stash them before you switch branches.

    (请在切换分支之前提交您的更改或隐藏它们)

    因为当前的分支dev 最初也是从master 分支上衍生出来的。而此时你要再从该分支上切换到其主分支。那么你需要先把该dev分支上的改动提交后才能切换,但是该dev分支上还没有完成全部的修改,你不想提交。那么此时你就要选择 stash 它们(你在当前分支上改动的却没有提交commit的内容)。

    所以第二步,在当前分支上执行 $ git stash 命令。将当前分支存起来;

    git stash list 查看stash的id

    这时候再执行 $ git status 命令,显示没有东西需要提交,这个时候你就可以切换到master分支上了。

    接着就可以在主分支master上创建并切换到新的分支去修复另一个Bug了。

    那修改完那个Bug也提交后,就该回到dev 分支上去继续修改那个未完成的Bug。

    执行 $ git checkout dev 切换到 dev 分支,这个时候执行 git status 命令仍旧显示没有东西需要提交。毕竟我们前边已经成功将dev上未提交的改动给“隐藏“了,这时,用  $ git stash list 命令去查看我们“存储”的列表。

    $ git stash apply 命令恢复,但是恢复后,stash内容并不删除,这时候再执行 $ git stash list 命令,id 为 8528ea2 s 的储藏项目还会在列表中,你需要用 $ git stash drop 来删除;

    如果有一个分支上多个 stash,如果需要恢复指定的 stash ,可以在命令尾部加id,如 $ git stash apply stash@{0},同样删除指定 stash 项目则执行如$ git stash drop stash@{1}

     $ git stash pop 命令,恢复的同时把 stash 存储列表的内容也删了。这时候再执行  $ git stash list 命令,id 为 8528ea2 s 的储藏项目不会在列表中。

    1. git用某个分支的内容创建分支,例如用dev的代码创建分支feat_warrant_filter
    git checkout -b feat_warrant_filter
    
    提交的时候在远程也创建feat_warrant_filter分支
    git push --set-upstream origin feat_warrant_filter
    
    1. git将远程分支拉取到本地并创建分支

    例如将远程test_qds分支拉取到本地并创建test_qds分支

    git checkout -b test_qds origin/test_qds
    

    9.git fetch -p

    git fetch命令通常用来查看其他人的进程,因为它取回的代码对你本地的开发代码没有影响。默认情况下,git fetch取回所有分支(branch)的更新。 除了取回新建的分支,怎么删除远程仓库已经删除的分支呢?

    1). git fetch -p 命令 命令行解释--prune -p -- remove any remote tracking branches that no longer exist remotely 英文意思:删除不存在的远程跟踪分支

    2). git remote prune origin

    10.git checkout .

    本地所有修改的。没有的提交的,都返回到原来的状态

    11.git branch -d

    git branch -d BranchName: 删除本地分支 git push origin --delete BranchName: 删除远程分支 git branch -a: 查看所有分支(本地和远程)

     

    ...待续

  • 相关阅读:
    Codeforces467C George and Job
    Codeforces205E Little Elephant and Furik and RubikLittle Elephant and Furik and Rubik
    Codeforce205C Little Elephant and Interval
    51nod1829 函数
    51nod1574 排列转换
    nowcoder35B 小AA的数列
    Codeforce893E Counting Arrays
    gym101612 Consonant Fencity
    CodeForces559C Gerald and Giant Chess
    CodeForces456D A Lot of Games
  • 原文地址:https://www.cnblogs.com/kexianting/p/11669214.html
Copyright © 2011-2022 走看看