git使用记录

发布 : 2019-06-01 分类 : git 浏览 :


配置

基础

切换分支

1
2
3
4
5
6
#切换到远程仓库已有的test分支
$ git checkout test
#切换到一个新的test分支,需要本地仓库不存在
$ git checkout -b test
#从当前分支的12rf`commit`提交出切换出一个新的分支
$ git checkout -b test 12rf

push && pull

1
2
3
4
5
6
7
8
9
10
11
12
13
#提交代码本地master到远程origin库master分支
$ git push origin master

#设置默认push && pull分支
#git push -> git push origin master
#git pull -> git pull origin master
$ git push -u origin master

#强制更新本地代码
#拉取代码到本地不合并
$ git fetch -all
#放弃本地所有修改跳到远程master分支
$ git reset --hard origin/master

分支管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#查看分支
#a 查看所有分支
#v 显示分支状态
$ git branch -av

#删除分支

#删除test分支,信息不同无法删除
$ git branch -d test
#强制删除test分支
$ git branch -D test

#删除远程分支test
$ git push --delete origin test

分布式工作流程

合并&回滚

合并一个分支

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#合并test分支到当前分支
$ git merge test

#正常合并成功
...

#合并有冲突
#1.解决冲突
#提交解决冲突完后的文件
$ git add <有冲突的文件>
# 提交本次合并信息
$ git merge --continue

#2.放弃本次合并,回滚到合并前
$ git merge --abort

合并单个文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#将test的a.txt文件复制到当前分支
#放弃当前分支对a.txt的所有更改,直接应用test分支的a.txt内容
$ git checkout test a.txt

#将test的a.txt文件复制到当前分支
#对比两个分支中的a.txt文件的更改
#通过选项选择合适的合并方式
#y -将此块应用于索引和工作树
#n -不要将此块应用于索引和工作树
#q -退出;不应用这块或任何其他的
#a -应用这个块和所有以后的块在文件中
#d -不要应用此块或任何后期块在文件中
#e -手动编辑当前块
#? —打印帮助
$ git checkout --patch test a.txt

合并其他分支的commit提交

  • 这里的冲突解决只是本次合并的解决,创建了一个新的commit
  • 当以后执行merge合并commit所在的分支时仍需解决冲突
    1
    2
    3
    4
    5
    #获取某次commit提交的内容到当前分支
    #获取的commit跟当前的commit对比有多处修改,则需要解决冲突
    $ git cherry-pick <commit>
    #冲突了,取消本次合并
    $ git cherry-pick --abort

使当前分支head跳到某个分支

1
2
3
4
#使当前的head跳到test分支
#当前分支的所有commit将丢失到仓库
$ git rebase --onto test dev
...

变基

1
2
3
4
5

1
2
3
4
5
6
7
8
#client是从server分支中衍生出来了
#这个命令放弃client中server分支的所有更改
# c6<-c8'<-c9' 本次c8中已放弃c3分支的所有更改
$ git rebase --onto master server client

#将client的头分支变成master分支
#c6<-c3'<-c8'<-c9'
$ git rebase master client
  • 变基是使分支看起来是一条直线的工作流程
  • 合并是多分支交叉
  • 如果c8修改了c3中的文件则变基时需要解决冲突,是否确认保存
  • 变基时执行所在的分支随意
  • 变基后需要手动使用merge合并目标分支

回滚

1
2
3
4
5
6
7
8
9
10
11
12
#回滚当前分支到指定的`commit`处
$ git reset --hard adae

#HEAD代表的是当前的工作头
#回滚到当前分支的上一次提交
$ git reset --hard HEAD^

#回滚到当前分支的上两次提交
$ git reset --hard HEAD^^

#回滚到当前分支的前100次提交
$ git reset --hard HEAD~100

日志

1
2
3
4
5
6
7
8
9
#查看当前分支的log
$ git log

#将当前的分支显示信息以当行的形式显示出来
$ git log --pretty=oneline

#查看本地仓库操作的所有日志
#上次的一些回滚操作的commit信息留存在此处
$ git reflog


服务器

创建一个裸仓库

1
$ git init --bare

待续…

本文作者 : xiaoxiaoxiao
原文链接 : http://xxcok.com/passages/git/
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!

知识 & 情怀 | 二者兼得

微信扫一扫, 向我投食

微信扫一扫, 向我投食

支付宝扫一扫, 向我投食

支付宝扫一扫, 向我投食

留下足迹