git分支操作

git鼓励使用分支:
查看分支:git branch
查看所有分支列表:git branch -a
创建分支:git branch name
切换分支:git checkout name
创建+切换分支:git checkout -b name
合并某分支到当前分支:git merge name
删除分支:git branch -d name

	迁移时所有代码、提交记录、分支等均保持了原来的

迁移后已迁移的无需重新下载,直接命令行修改下push的远程仓库地址:

修改命令 :git remote set-url origin
例:git remote set-url origin ssh://[email protected]:7999/cc/aa.git
git pull <远程库名> <远程分支名>:<本地分支名>
例如:git pull origin develop:develop
git checkout 分支名称 ----->进入这个分支后,
git pull origin 目标分支 就会将目标分支代码拉到此分支;
如何撤销git pull ?
本来想把github上的newpbft合并到本地的newpbft分支上,由 于没有查看当前分支,直接运用git pull origin newpbft,结果将newpbft合并到了master分支中。
1、运行git reflog命令查看你的历史变更记录;
2、然后用git reset --hard HEAD@{n},(n是你要回退到的引用位置)回退。 git reset --hard 40a9a83

    如果是想要将feature-xx分支拉develop上的代码,为git pull origin develop:feature-xx;如果拉去失败,可以通过git或对应的git远程仓库界面工具对比featrue-xx与develop分支差异,手动更新到最新,在进行新需求开发;

如何将本地修改提到分支上:

1.git将当前分支上修改的东西转移到新建分支
比如我在A分支做了一些修改,现在由于某种原因(如A分支已经合并到master)不能把A分支上修改的东西保留下来但是需要把A分支上修改的东西继续在新分支继续修改。那么现在我们可以有两种简单的做法完成这一需求。
第一种方法
我们不需要在A分支做commit,只需要在A分支新建B分支,然后切换过去。这个时候你会发现修改的东西在A,B分支都有。这个时候在B分支commit,那么这些修改保留在B分支上,再切换到A分支上会发现修改都没有保留下来。
第二种方法
使用git stash 将A分支暂存起来,然后在某一个分支(如master分支)新建一个分支B,然后在B分支上使用git stash pop 将修改弹出到B分支上,然后这些修改就在B分支上了。然后我们又可以愉快的玩耍了~
参考自:
https://blog.csdn.net/stan_pcf/article/details/51911101
这部分原因参考:
git 切换本地分支时,把当前分支修改的内容带到了下个分支中去
举个梨子,首选小明拥有2个本地分支A和B,2个分支中都有test.txt文件,小明在A分支中修改了test.txt文件的内容,git checkout B后,

jack@jack-copumter:~/workspaces$ git checkout B
M text
Switched to branch ‘B’

如果是小白请看这个,不是请跳过

在使用git checkout , git status,或git diff files时会出现奇怪的标志。如M,T,D,A,R,U等等
A: 增加的文件.
C: 文件的一个新拷贝.
D: 删除的一个文件.
M: 文件的内容或者mode被修改了.
R: 文件名被修改了。
T: 文件的类型被修改了。
U: 文件没有被合并(你需要完成合并才能进行提交)
X: 未知状态。(很可能是遇到git的bug了,你可以向git提交bug report)
在git diff-files的手册man git diff-files中可以查到这些标志的说明。

最后大家就看到了自己在A分支修改的test.txt的内容,就跑到了B中去了
分析
1 什么场景下会出现
小明原本只有A分支,后来git checkout -b B生成了一个B分支;
小明的A和B分支都从远程分支master下拉了一次版本,现在本地2个分支的版本完全一样
2 原因是什么
我想现在大家已经知道关键问题在哪里了吧,就是2个分支的版本完全一样,原来git checkout切换分支的时候,会对比当前分支的md5值,查看md5值用git log

jack@jack-copumter:~/workspaces$ git log
commit d39c07fa258ab0e82cf9bab19643a390e1670ce6 (tag: v1.1.0, origin/pre, pre)
Author: jack 10*****[email protected]
Date: Tue Nov 13 19:28:16 2018 +0800

当2个分支的md5值一样的时候,git check就会带着你的修改去宁外一个分支,
解惑
有些小伙伴可能会问了,为啥我git checkout它就提示

jack@jack-copumter:~/workspaces$ git checkout pre
error: Your local changes to the following files would be overwritten by checkout:
src/app/api/api.go
Please commit your changes or stash them before you switch branches.
Aborting

还是我刚刚说的,你们的md5值不一样,实际上md5值就是git的版本号,你可以去查看你的2个分支肯定不在同一个版本上.

一些特殊情况,你切换的分支名和你的文件名一样,比如你有一个分支叫test刚好有一个文件叫test,那么你git checkout test实际上是操作了文件

参考自https://blog.csdn.net/qq_27507377/article/details/84064121

Git如何在不提交当前分支的情况下切换到其它分支进行操作——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 命令。将当前分支存起来,id为 8528ea2 s

在这里插入图片描述

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

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

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

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

在这里插入图片描述

会发现id 为 8528ea2 s 的储藏项目在列表中,我们需要将其恢复,有两个办法:

一、用 $ 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 的储藏项目不会在列表中。

此时再查看 $ cat 会发现之前的改动还存在,且执行 git status 就会继续显示该分支上有改动未提交。

参考自:
https://blog.csdn.net/asheandwine/article/details/79003270

你可能感兴趣的:(前端,文档)