码迷,mamicode.com
首页 > 其他好文 > 详细

git常用命令总结

时间:2019-10-14 01:40:52      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:apply   过滤   远程仓库   更新   需要   lin   操作   显示   服务器   

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: 查看所有分支(本地和远程)

 

...待续

git常用命令总结

标签:apply   过滤   远程仓库   更新   需要   lin   操作   显示   服务器   

原文地址:https://www.cnblogs.com/kexianting/p/11669214.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!