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 --廖雪峰老师 ...
随机推荐
- 22. Bypass X-WAF SQL注入防御(多姿势)
0x00 前言 X-WAF是一款适用中.小企业的云WAF系统,让中.小企业也可以非常方便地拥有自己的免费云WAF. 本文从代码出发,一步步理解WAF的工作原理,多姿势进行WAF Bypass. 0x0 ...
- HDU 3966 Aragorn's Story (简单树链剖分)
题意:给一棵树,并给定各个点权的值,然后有3种操作: I C1 C2 K: 把C1与C2的路径上的所有点权值加上K D C1 C2 K:把C1与C2的路径上的所有点权值减去K Q C:查询节点编号为C ...
- .NET 中文件嵌套,例如:cshtml文件下面嵌套css和js【机器翻译】
越来越多的我发现自己在我的一些较大的Web项目中丢失了文件.有很多内容要处理 - HTML视图,几个派生CSS页面,页面级CSS,脚本库,应用程序范围的脚本和页面特定的脚本文件等等.幸运的是,我使用R ...
- 浅谈js模块加载方式(初级)
1.简介: 前端模块化开发日渐鼎盛,如何将零散的插件或者是普通的js脚本文件统一管理及引用,是众多开发者共同的目标.本人是从事.net开发的,最近对前端的一些东西特别的感兴趣,也会尝试的夹杂一点自己 ...
- 历届试题_log大侠
标题:Log大侠 atm参加了速算训练班,经过刻苦修炼,对以2为底的对数算得飞快,人称Log大侠. 一天,Log大侠的好友 drd 有一些整数序列需要变换,Log大侠正好施展法力... ...
- 2017-10-7 清北刷题冲刺班p.m
测试 A 同花顺 文件名 输入文件 输出文件 时间限制 空间限制card.cpp/c/pas card.in card.out 1s 512MB题目描述所谓同花顺,就是指一些扑克牌,它们花色相同,并且 ...
- 搭建一个简单的FTP服务器
本文介绍通过win7自带的IIS来搭建一个只能实现基本功能的FTP服务器,第一次装好WIN7后我愣是没整出来,后来查了一下网上资料经过试验后搭建成功,其实原理和步骤与windows前期的版本差不多,主 ...
- css奇技淫巧—box-shadow与outline绘制多重边框效果
css语法: box-shadow: h-shadow v-shadow blur spread color inset; 注释:box-shadow 向框添加一个或多个阴影.该属性是由逗号分隔的阴影 ...
- linux下find查找与批量替换文件中指定内容
经常在部署tomcat时需要替换配置文件中的ip,find命令批量替换还是很方便的 查找需要替换的ip,看看哪些文件有配置这个ip,执行下面命令: find ./ -type f -regex &qu ...
- Vs 排除的文件➕ 添加回项目。。。。
显示所有文件之后吧,就能看到排除掉的文件了.右键之前的文件,包括在项目中即可.