赞
踩
目录
git合并dev分支的指定的多个commit 到 master分支
本地下载了 master 分支,如何切换到远端test分支?
git checkout dev
git pull
git checkout master
git merge dev
git push -u origin master
git checkout master
git pull
git checkout dev
git merge master
git push -u origin dev
理论学习:
https://git-reference.readthedocs.io/zh_CN/latest/Getting-Started/
1、创建特性分支,修改后提交;
2、切换目标分支:git checkout release;
3、查看log: 可以看到刚刚 push的 记录
4、右键选择 cherry-pick ,点击后,会将提交 合并+commit 到当前分支;
右键前,可以先多选, 这样可以把多次commit 一块合并到当前分支
5、直接push ;
idea-->New Branch -->填入分支名称--->checkout到新的分支---》push分支 ---》over
(当前分支为空的话,可以把代码拷贝进来)
git会进入当前文件目录,
然后执行如下命令:
find . -name ".git" | xargs rm -Rf
该项目就会去除git的版本控制了。再修改的话也不会影响git的版本库。
- 切换到dev分支
- git checkout branch
-
- 查找commitid ,带筛选条件,只查自己提交的
-
- $ git log --author=zhandsan
- commit 591cced7f43e9d7d039bc2e72f0f6195740fa19e (HEAD -> xxljob-20200106, origin/xxljob-20200106)
- Author: zhandsan <**************>
- Date: Tue Feb 18 17:38:01 2020 +0800
-
- 备注****************
-
- commit cbbd4b8f89e758e247f9903ebcf823ac0d64d9fa (origin/test, test)
- Author: zhandsan <**************>
- Date: Mon Feb 17 16:55:21 2020 +0800
-
- 备注****************
-
- commit e7d5c444255b7700cb95f0fe447106c347597636
- Author: zhandsan <**************>
- Date: Thu Jan 16 17:14:24 2020 +0800
-
- 备注****************
-
- commit ed0172a74b1871fb87528ad8b6f56456253923ad
- Author: zhandsan <**************>
- Date: Thu Jan 16 16:18:58 2020 +0800
-
- 备注****************
-
- # 记路上面的 commit 591cced7f43e9d7d039bc2e72f0f6195740fa19e
-
- #切换到master 分支
- git checkout master
-
- #摘樱桃 git cherry-pick id1 id2 id3 多个id用空格分开
- $ git cherry-pick ed0172a74b1871fb87528ad8b6f56456253923ad e7d5c444255b7700cb95f0fe447106c347597636 cbbd4b8f89e758e247f9903ebcf823ac0d64d9fa 591cced7f43e9d7d039bc2e72f0f6195740fa19e
- error: could not apply ed0172a7... 备注****************
- hint: after resolving the conflicts, mark the corrected paths
- hint: with 'git add <paths>' or 'git rm <paths>'
- hint: and commit the result with 'git commit'
-
|
场景:从test 创建了分支 test-a;
开发一段时间后,test分支代码变了,需要将test最新的代码同步到test-a 分支;
处理:1、本地先切换到 test-a 分支, 然后pull ,pull的时候 远端选 test分支(pull结束后,已经自动commit了,此时可以直接push提交代码到test-a远端)。
1、命令行: git checkout test
检查: git branch -avv
2、idea : 如下,点击“show 49 More” ,在弹出的列表汇总选择需要切换的远端分支,
弹出框中会自动带出“test” 分支名称 。
如果本地已经有test分支了(之前用上面的方式切换过),可以直接在Local Branches操作
error: You have not concluded your merge (MERGE_HEAD exists)
https://www.cnblogs.com/goloving/p/10330337.html
原因可能是在以前pull下来的代码自动合并失败。
解决方案一:保留本地的更改,中止合并->重新合并->重新拉取
$:git merge --abort $:git reset --merge $:git pull
git pull之后然后重新解决冲突,再push,(记得需要稍微跟自己push的要有一点区别,要不然又会造成这样的情况)
解决方案二:舍弃本地代码,远端版本覆盖本地版本(慎重)
$:git fetch --all $:git reset --hard origin/master $:git fetch
git 底层有一个kv的数据库 ,hashMap
测试: git hash-object - w test.txt # set
git cat-file -p lasjflsafdlsadfjsalf # get lasjflsafdlsadfjsalf 为key
二次 git hash-object - w test.txt # key 会被覆盖
git原理: 直接取文件内容入库。 svn 则是保存的文件
git支持多个远程仓库? 当git用户数量很大的时候(分成多个团队),
一个仓库会比较卡,压力大。可以再增加一个git服务器。 还可以再增加git远程备份服务。
一个本地项目,对应多个远程连接,如何配置???
命令学习:
git init my_project #创建一个仓库, 生成 .git
cd my_project
echo test.txt
git status
git add test.txt # 既然locah 暂存区
git status # 随时查看, 会有提示,下一步操作
git rm --cached text.txt # 从暂存区删除
git add -A #add all
git commit test.txt -m "first commit" # 提交操作 -m 注释
git commit -am "注释:all cmmit"
######### 远程仓库提交》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
## 先在gitlab 创建仓库
git remote add origin http:// 远程仓库地址 # 远程仓库 名字 origin
git push origin
git push --set-upstream orgin master
多个git命令可以 分号 间隔,一次执行
测试: git add -A ;git commit -am 'commit test' ;git push; #一次执行
分支管理:
git branch
git branch -a //查看远程和本地仓库所有分支git
git branch -av
git branch -avv 查看本地与远程关联信息, 第二个v
#1基于当前分支新建分支
git branch <branch name>
git branch dev #基于当前分支创建dev 分支
git branch test dev # 基于dev 创建test分支
#2基于远程分支创建一个分支
git branch
git branch test2 origin/master #基于远程 origin/master 创建 test2分支
git
#3基于提交新建分支
git branch <bramch name> <commit id>
git log # 查看提交log
git brach branch4commit 73884hk21h4321h4k1h243h2k34k243h234h1 #基于 "73884hk21h4321h4k1h243h2k34k243h234h1" 提交 创建分支 branch4commit
#4基于tag创建一个分支
#删除分支
git branch -d test #删除test 分支
git branch -d test test2 #删俩分支
#切换分支
git checkout <branch name>
#合并分支
git merge <merge target>
#解决冲突, 此时 status 为mergeing 状态 ,
#需要手动修改后重新提交。
不是同一行冲突,git会自动mergy
#############远程管理##############
git remote -v
git remote add newName http:xxx.xx.com.cn
#添加到第二个远程仓库
git remote add origin2 http://git.xxx.com/cjf/myp.git
git remote 此时会返回两个仓库 newName origin2
git push # git branch -avv 查看当前分支关联的远程分支是那个 ,git branch 就会push到关联分支
如何push到第二个远程仓库?指定 ,master push 到 origin2
git push --set-upstream origin2 master
git branch origin # push到 origin分支
######上面的操作命令太复杂,idea操作会方便很多
右键菜单: git -> reposistory->Remotes 可以看到多个远程仓库
push的时候,可以选择远程仓库。 也可以直接新增远程仓库 。
push弹出框中 ,蓝色链接 可以 点开,选择的 ,或者 define Remote 新增一个远程仓库
#####远程仓库删除
git remove [-v]
eg: git remote remove origin
#上传新分支到远程
git push --set-upstream origin master ## master push 到 origin
#将本地分支与远程建立关联
git branch --track --set-upstream-to-origin/test test
########################tag 管理 ,跟分支差不多,区别tag是只读的,tag跟里程碑关联在一起。不允许修改
#查看当前
git tag
#创建tag
git tag <tagName> <branch>
eg: git tag tag1 dev # 基于dev 创建tag1
eg: git tag tag2 232i42u34o234uo21u4o21u43o12u34 # 基于提交创建tag
#查看当前分支下所有提交日志
git log
可以搜索 /value 类似vi
#
git log --oneline
#
git log dev --oneline
#分支比对、关联
git log dev..master
git log master..dev
git checkout dev #切换到dev
git merge master #dev 合并到 master
git log dev..master # 再次比对,没有区别了
#提交网络
git log --graph --oneline
git log --pretty=format:'%h %s' --graph
#最后一次提交
git show dev
############################# git 底层原理 ############################
git存储对象(hashMap)
向数据库中插入任意内容,它会返回一个用于取回该值的hash键。
如果内容不变, hash key 是不会变的。
# .git/objet 中保存了所有的版本数据
# 查找所有的git对象
find .git/objects/ -type -f
git hash-object -w test.txt
#内容回滚 ,其实就是通过早期的 hashKey 找到内容,然后写入当前文档。
git cat-file -p 34kjj324j23 > test.txt # 34kjj324j23 ,是早期hashKey的前半部分
#保存的对象其实是个 blob对象
git cat-file -t 729jk2h34234
blob
echo "hello world " > test.txt
#所谓的本地缓存,其实就是 ./git/objects中
#hashcode 是根据内容产生的,是唯一的。
########## git 数对象 ,类似操作系统的目录
git cat-file -p master^{tree}
## 树中保存了: 文件类型、字符类型、hashcode 、文件名
git cat-file -p <树的hash key>
返回:10064 blob 2l3j4l214l21j43l214l2j4l2j34l21j34 test.txt
树中 节点内容改变,上级会变,一直到顶级对象 。 下集不会变。
比对的时候,比对的是两个树,都是key值在比对,非常快
git分支:引用
ref目录中,
tag: ref/tags 也是引用
撤销:
git reset --soft HEAD^
eg:撤销一次commit: git reset --soft HEAD~1
撤销n次commit : git reset --soft HEAD~n
--mixed
意思是:不删除工作空间改动代码,撤销commit,并且撤销git add . 操作
这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。
--soft
不删除工作空间改动代码,撤销commit,不撤销git add .
--hard
删除工作空间改动代码,撤销commit,撤销git add .
注意完成这个操作后,就恢复到了上一次的commit状态。
修改cmmit注释
git commit --amend
此时会进入默认vim编辑器,修改注释完毕后保存就好了。
############### git 私服 ####################
github 开发源码存储服务
gitlab: web项目提供了源码管理的功能
码云: oschina 提供的一个商业的源码服务
码市: coding提供的一个商业化的源码服务
#######四种通信协议
1、Local(本地协议)
2、ssh
3、http(dump,smart)
4、git
local: 基于本地文件系统或共吸纳过(NFS)文件系统进行访问 ,小团队用,局域网
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。