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 --廖雪峰老师 ...
随机推荐
- ubuntu14.04装完系统更新后桌面挂了
一开始是只显示个鼠标什么都没有,ctrl-alt-1切到控制台下,把lightdm重启下再进去,多了两个桌面图标,但是顶栏和侧栏都没有,也就是根本没法运行其它程序. 但是幸好桌面右键菜单里有一个“在控 ...
- 通过sessionid提取这个用户在服务器中保存的session变量
- 电脑MAC地址
电脑MAC地址(Media Access Control) MAC地址是固化在网卡上串行EEPROM中的物理地址,通常有48位长.用来表示互联网上每一个站点的标识符,采用十六进制数表示. 任一网络设备 ...
- Linux下查看CPU使用率 --- top命令的使用
在系统维护的过程中,随时可能有需要查看 CPU 使用率,并根据相应信息分析系统状况的需要.在 CentOS 中,可以通过 top 命令来查看 CPU 使用状况.运行 top 命令后,CPU 使用状态会 ...
- hdu1081
#include<iostream> using namespace std; int GetMaxNum(int a[],int n) //求最大字段和 { int i,sum=0,ma ...
- Windows 7,无法访问internet,DNS无响应
我电脑网络连接显示有internet访问,但是网页打不开,QQ上不了,但可以PING通谷歌DNS 8.8.8.8,一PING域名就无法解析. 解决方法:开始-运行-输入"netsh wins ...
- POJ 1601 拓展欧几里得算法
学习链接:http://www.cnblogs.com/frog112111/archive/2012/08/19/2646012.html 先来学习一下什么是欧几里得算法: 欧几里得原理是:两个整数 ...
- BadBoy录制模式:Request 和 Navigation比较
[前言] 今天来为大家介绍下BadBoy录制模式: Request 和 Navigation的比较! 如果您的电脑还未安装BadBoy这款工具的话,可以参考下BadBoy安装步骤和简单介绍:http: ...
- [USACO1.4]等差数列 Arithmetic Progressions
题目描述 一个等差数列是一个能表示成a, a+b, a+2b,..., a+nb (n=0,1,2,3,...)的数列. 在这个问题中a是一个非负的整数,b是正整数.写一个程序来找出在双平方数集合(双 ...
- Spring ThreadPoolTaskExecutor队列满的异常处理
<!-- 配置线程池 --> <bean id="threadPool" class="org.springframework.scheduling.c ...