标签: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
查看当前分支所有提交的commit的message: git log HEAD --pretty=format:%s 过滤, 仅显示功能分支feature相关的: git log <last release> HEAD --grep feature
假如现在的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 的储藏项目不会在列表中。
git checkout -b feat_warrant_filter
提交的时候在远程也创建feat_warrant_filter分支
git push --set-upstream origin feat_warrant_filter
例如将远程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: 查看所有分支(本地和远程)
...待续
标签:apply 过滤 远程仓库 更新 需要 lin 操作 显示 服务器
原文地址:https://www.cnblogs.com/kexianting/p/11669214.html