git学习(一)
提:
远程的主机名(远程仓库服务器名): origin
本地的主分支: master(本地master
分支)
远程的主分支: maste(远程仓库的master
分支)
git clone git@gitlab.com:xxx/yyy.git
使用git clone
命令克隆了一个仓库,命令会自动将其添加为远程仓库并默认以 “origin
” 为简写,同时会自动设置本地master
分支跟踪克隆的远程仓库的master
分支。
使用git remote, 至少应该能看到origin
--这是 Git 给你克隆的仓库服务器的默认名字.
git remote -v, 会显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL.
origin git@gitlab.com:xxx/yyy.git (fetch)
origin git@gitlab.com:xxx/yyy.git (push)
也可以在运行 git remote add <shortname> <url>
添加一个新的远程 Git 仓库,同时指定一个可以轻松引用的简写,如添加gs:
这个名字是作为远程仓库服务器的别名使用, 现在你可以在命令行中使用字符串 gs
来代替整个 URL
这个名字只能在添加远程仓库时候定义好的,后续建议不要再更改, 在后面的代码中我们就使用origin为远程仓库名. (当然可以使用更换名字git remote rename origin newName)
假设当前所在的本地分支是master
$ git remote add gs git@gitlab.com:xxx/yyy.git (fetch)
$ git remote -v
gs git@gitlab.com:xxx/yyy.git (fetch) (fetch)
gs git@gitlab.com:xxx/yyy.git (fetch) (push)
可以运行git fetch gs:
$ git fetch gs
From git@gitlab.com:xxx/yyy.git
* [new branch] master -> gs/master
$ git remote remane gs origin
$ git remote -v origin git@gitlab.com:xxx/yyy.git (fetch) (fetch)
origin git@gitlab.com:xxx/yyy.git (fetch) (push)
当获取数据时候,是使用git fetch [remote-name],例如
假设当前所在的本地分支是master git fetch origin master
git merge master
必须注意 git fetch
命令会将数据拉取到本地仓库 - 它并不会自动合并或修改当前的工作, 当准备好时必须手动将其合并入你的工作区。
如果你有一个分支设置为跟踪一个远程分支,可以使用 git pull
命令来自动的抓取然后合并远程分支到当前分支
git pull = git fetch + git merge
当前本地的分支是master, 远程仓库建立了一个分支masterBranch, 现在要关联到本地
git checkout -b masterBranchLocal origin/masterBranch (基于本地master创建一个分支masterBranchLocal,并关联远程仓库的masterBranch,同时本地切换到masterBranchLocal)
git branch (可以查看当前的分支是在masterBranchLocal上面)
* masterBranchLocal
master
git pull origin masterBranch (从远程仓库的masterBranch下载数据到masterBranchLocal分支上)
或则直接git pull (这行语句和上面一样, 因为当前分支和远程仓库的分支已经关联起来了) 下面的三行语句和上面的是等效的,只不过拆开写了.
git branch masterBranchLocal
git checkout masterBranchLocal
git pull origin masterBranch (这里不能直接用git pull, 因为masterBranchLocal没有和任何仓库的分支关联)
git push [remote-name] [branch-name]
。 当你想要将 master
分支推送到 origin
服务器时(再次说明,克隆时通常会自动帮你设置好那两个名字),那么运行这个命令就可以将所做的备份到服务器:
$ git push origin master (推送本地master分支到远程仓库master上)这里省略了 refs/for/master
$ git push origin master:refs/for/master (和上面的命令效果一样)
$ git push origin masterBranch (推送本地master分支到远程仓库masterBranch分支上, 当前处在masterBranch分支上)
git push的一般形式为 git push <远程主机名> <本地分支名> <远程分支名> ,例如 git push origin master:refs/for/master ,即是将本地的master分支推送到远程主机origin上的对应master分支, origin 是远程主机名, 第一个master是本地分支名,第二个master是远程分支名。
如果远程分支被省略,如上则表示将本地分支推送到与之存在追踪关系的远程分支(通常两者同名),如果该远程分支不存在,则会被新建
=============================================================================================================
1. 如何撤销git reset HEAD~1的操作(其实撤销git reset HEAD~n, n为1,2,3,...):
假如现在我们要撤销git reset HEAD~4的操作:
首先: git reflog 出现如下
我们要获取git reset HEAD~4的id, 从图中可以看出, 我们要复制蓝色框里的id值, 不要复制红色框里的id, 因为我们要撤销这个命令,那么就要获得这个命令之前的id值
复制到的id是: c3823b7
$ git reset --hard c3823b7
这样就可以撤销该命令了
=============================================================================================================================
2. 要删除远程的分支, 直接使用命令git push origin :testBranch1
如上图, 使用git branch -r, 查看远程的分支, 现在我们要删除远程分支testBranch1
使用命令 git push origin :testBranch1
=============================================================================================================================
3. 使用git管理代码,最不可避免的出现一种情况:
假设你基于master分支新建一个分支testBranch1, 去处理一些问题。同时你的另一个同事也在master基础上新建一个分支testBranch2,
你这个同事更改完了代码,git push到testBranch2上去了, 而且已经merge到master主分支了. 此时你想更新他的代码, 但是自己的testBranch1上代码还没有完成, 怎么办?
下面是本人总结的流程, 亲测可以用.
(查看当前所在的分支, 这里我们是testBranch2, 个人开发用的)
git branch
$ git branch
master
testBranch1
* testBranch2 (查看当前分支修改的内容, 还没有提交到testBranch2分支上, 所以这里会显示出修改的文件)
$ git status
On branch testBranch2
Untracked files:
(use "git add <file>..." to include in what will be committed) testBranch2.txt nothing added to commit but untracked files present (use "git add" to track) (这两步是做add和commit, 但是不做git push origin testBranch2操作, 因为我还有继续更改, 你也可以push上去, 看个人习惯了)
(其实这里的操作是为了checkout分支用的, 不用提交也能切换分支, 但是当文件太多时候, 切换到其他分支, 用git status查看修改文件, 也包含这里修改的文件)
(所以建议这里是commit到本地, 即不做push操作, 个人这里是只commit到本地的操作)
$ git add testBranch2.txt
$ git commit -m "add testBranch2.txt, when checkout back, use git reset HEA~1"
[testBranch2 61acac7] add testBranch2.txt, when checkout back, use git reset HEAD~1
1 file changed, 1 insertion(+)
create mode 100644 testBranch2.txt (切换到master分支, 然后更新master代码)
$ git checkout master
$ git pull origin master (切换到testBranch2分支)
$ git checkout testBranch2 (如果你之前把testBranch2内容push上去了, 这里就不用执行)
(因为我没有push上去, 只commit到本地, 所以这里执行git reset HEAD~1)
(注意这里是先reset, 然后merge)
$ git reset HEAD~1
Unstaged changes after reset:
M testBranch2.txt (这里要merge代码, 可以选择使用 --no-ff 这个参数, 看项目需求, 个人建议使用这个参数)
(git merge –no-ff 可以保存你之前的分支历史。能够更好的查看 merge历史, 以及branch 状态)
(git merge 则不会显示 feature,只保留单条分支记录)
$ git merge --no-ff master (在上面执行git reset HEAD~1后, 查看之前修改的文件)
$ git status
On branch testBranch2
Untracked files:
(use "git add <file>..." to include in what will be committed) testBranch2.txt nothing added to commit but untracked files present (use "git add" to track)
=============================================================================================================================
未完待续...
git学习(一)的更多相关文章
- Git 学习看这篇就够了!
Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理. 可能新手会问"git和github有什么关系啊?" git是一个版本控制工具: githu ...
- Git学习笔记与IntelliJ IDEA整合
Git学习笔记与IntelliJ IDEA整合 一.Git学习笔记(基于Github) 1.安装和配置Git 下载地址:http://git-scm.com/downloads Git简要使用说明:h ...
- git学习之branch分支
作为新手,站在我的角度肤浅的来理解,分支就是相当于开辟了一个新的临时工作区,在这个工作区进行文件代码改动,然后在合并到master主工作区,这样能保证主工作区的安全性和稳定性,对于团队协作尤为重要. ...
- git学习手册
#git学习手册 git: Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理.[2] Git 是 Linus Torvalds 为了帮助管理 Linux内核开发而 ...
- Git学习笔记(10)——搭建Git服务器
本文主要记录了Git服务器的搭建,以及一些其他的配置,和最后的小总结. Git远程仓库服务器 其实远程仓库和本地仓库没啥不同,远程仓库只是每天24小时开机为大家服务,所以叫做服务器.我们完全可以把自己 ...
- Git学习笔记(四)
一.忽略特殊文件 在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件. 不需要从头写.gitignore文件,GitHub已经为我们 ...
- git 学习笔记6--remote & log
git 学习笔记6--remote & log 创建SSH Keys ssh-keygen -t rsa -C "1050244110@qq.com" 本地关联远程 git ...
- Git学习(4)基本操作
1.版本提交 首先,接着上个Git学习(3)继续 我们先修改test.txt文本内容,增加一些信息进去,然后保存: Add a new data 第一步:运行命令 git status 命令查看文件是 ...
- git学习(这个我没有整理,是我不断在学习的过程中,自己总结的,对象是我,不过有问题的,我们可以相互交流)
每次git提交,都会有一个parent指针,指向上一次的commit , 如果合并,master就和hotfix河道一起,就直接删除hotfix就OK 此时,虽然操作一样,大底层实现不一样 ...
- git学习笔记01-git最基本的工作原理分布式
git学习的网站 http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 --廖雪峰老师 ...
随机推荐
- Luogu 3312 [SDOI2014]数表
在这一篇里把所有的套路写全方便自己之后复习. 首先是一个小学生数学:$a$整除$b$ $ = $ $\frac{b}{a}$ 也就是说这题中格子$(i, j)$的值就是既能被$i$整除又能被$j$整 ...
- Entity Framework Code-First(3):Setup Environment
Setup Development Environment for EF Code-First: Let's setup the development environment for Code-Fi ...
- 5.6 安装slack,Skype,google
1.将安装包放到自己的目录下: 2.打开终端,进入安装包所在的目录(cd /文件名) 3.输入命令:sudo apt-get install 安装包名 4.等待安装结束 5. 在搜索框中输入关键字sl ...
- div设置滚动条内容任然显示不全
<div style="overflow:scroll;height:100%"></div> 注意:高度需设置为100%,不然内容显示不全
- const指针与指向const的指针
当使用带有const的指针时其实有两种意思.一种指的是你不能修改指针本身的内容,另一种指的是你不能修改指针指向的内容.听起来有点混淆一会放个例子上来就明白了. 先说指向const的指针,它 ...
- 反射实现数据库增删改查DAO及DAOImpl源代码(二)
配置文件源码 配置文件主要用于配置数据库对象(javaBean),配置表名,配置查询条件,配置删除条件 文件名称:objectConfigPath.properties 这个配置文件里面配置的是另外一 ...
- uva1610 聚会游戏(细节处理)
uva1610 聚会游戏(细节处理) 输入一个n(n<=1000且为偶数)个字符串的集合D,找一个长度最短的字符串(不一定要在D中出现)S,使得D中恰好一半字符串小于等于S,另一半大于S.如果有 ...
- Openjudge jubeeeeeat
jubeeeeeat 题目链接 总时间限制: 1000ms 内存限制: 256000kB 描述 众所周知,LZF很喜欢打一个叫Jubeat的游戏.这是个音乐游戏,游戏界面是4×4的方阵,会根据音乐 ...
- 2017-10-12 NOIP模拟赛
斐波那契 /* 相同颜色的节点与父亲节点的差相等,且是一个小于它的最大斐波那契数 所以降两个点同时减去小与它的最大斐波那契数,直到两点相等 */ #include<cstdio> ; ...
- Java按模板导出Excel———基于Aspose实现
目录 开发环境 先看效果 引入jar包 校验许可证 导出方法 测试结果 占位符 开发环境 jdk 1.8 Maven 3.6 SpringBoot 2.1.4.RELEASE aspose-cells ...