Git 使用

 Git操作

一、创建git仓库

git init --bare fasloan.git

授权限

chown -R git:git fasloan.git     

远程库克隆

git clone git@X.X.X.X:/home/yd_fasloan/fasloan.git

二、创建与合并分支

(分支管理:你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。其他版本控制系统如SVN等都有分支管理,但是用过之后你会发现,这些版本控制系统创建和切换分支比蜗牛还慢,简直让人无法忍受,结果分支功能成了摆设,大家都不去用。但Git的分支是与众不同的,无论创建、切换和删除分支,Git在1秒钟之内就能完成!无论你的版本库是1个文件还是1万个文件。)

1.创建dev分支,然后切换到dev分支:

$ git checkout -b dev

创建分支并切换

git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:

$ git branch dev

$ git checkout dev

Switchedto branch'dev'

2. 用git branch命令查看当前分支:

$ git branch                   

* dev               

master

git branch命令会列出所有分支,当前分支前面会标一个*号。

查看当前分支

在dev分支上正常提交,比如对fasloan_view.py 做个修改,删除一行:print111然后提交:

3. 先查看当前状态:

当前状态

表示修改了fasloan_view.py的文件内容,现在提交一下将文件加入暂存区:

添加暂存区

对刚提交的文件进行描述,实际上是把暂存区的所有内容提交到当前分支:

描述修改

简单解释一下git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。查看现在的状态,该工作区是干净的没有任务去提交:

当前状态

现在,dev分支的工作完成,我们就可以切换回master分支:

切换分支

查看fasloan_view.py文件,发现刚才删除那行仍然存在:

1.查看fasloan_view.py文件

查看文件内容

2.内容未修改:

未改动内容

解决办法:

因为那个提交实在dev分支上,而master分支此刻提交点并没有变。我们把dev分支上的工作修改合并到master分支上:

合并分支

git merge命令用于合并指定分支到当前分支。合并后,再查看fasloan_view.py的内容,就可以看到,和dev分支的最新提交是完全一样的。

修改文件内容

现在将所有改动都合并到主分支了,用git log看看分支历史:

查看分支历史

在实际开发中,我们应该按照几个基本原则进行分支管理:

(首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;

那在哪干活呢?干活都在dev 分支上,也就是说,dev 分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。)

合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

 因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。

$ git merge --no-ff  -m "merge with no-ff " dev

$ git log--graph --pretty=oneline --abbrev-commit

三、查看远程库的信息用git remote::

远程库信息

或者,用git remote -v显示更详细的信息:

远程库信息

上面显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址。

四、推送分支

1.推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上

推送分支

并不是一定要把本地分支往远程推送

master分支是主分支,因此要时刻与远程同步;

dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;

2. 多人协作工作模式:

(1)使用git push origin  <分支名> 推送自己的修改

(2)如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并

(3)]如果和并有冲突,则解决冲突,并在本地提交

(4)没有冲突或者解决掉冲突后,再用git push origin <分支名>就能推送成功

如果git pull提示no tracking information, 则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <分支名> origin/<分支名>

五、解决冲突:

新分支开发feature1:

创建新分支

修改fasloan_view.py,添加了一行print(11)

添加一行内容

提交:

提交到当前分支

在master分支上把fasloan_view.py文件修改添加print(1111), 文件已被修改:

添加一行

添加文件到暂存区并提交:

添加到当前分支

这种情况git无法执行快速合并,只能试图把各自的修改合并起来,但这种合并可能会有冲突:

合并分支

Git告诉我们,fasloan_view.py文件存在冲突,必须手动解决冲突后再提交。git status也可以告诉我们冲突的文件:

冲突文件内容

修改内容之后保存,再提交:

修改提交文件

删除feature1分支:

删除分支

最后推到远程:

同步到远程库

六、版本回退

Git每当文件修改到一定程度的时候,就可以“保存”一个快照,这个快照在Git里被称为commit,一旦把文件改乱了,或者误删了文件,还可以从最近的一个commit恢复,继续工作。

git log命令显示从最近到最远的提交日志,如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数:

提交日志

看到一大串类似7feo2的是commit id(版本号), 一个通过SHA1计算出来的非常大的数字,用十六进制表示。

回到上个版本,首先Git要知道当前版本是哪个,在Git中,用HEAD表示当前版本,也就是最新。上个版本HEAD^,上上个版本时HEAD^^, 当然网上100个版本,写成HEAD~100.

回退上一个版本:

回退版本

已被还原:

还原版本

若想再回去,只要命令行窗口还没有被关掉,可以顺着找commit id,于是就可以回到未来的某个版本,版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了:

回到指定版本

你回退到了某个版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本,Git提供了一个命令git reflog用来记录你的每一次命令:

查看记录

又找回了你想回到指定版本的commit id。

七、撤销修改:

git checkout -- file可以丢弃工作区的修改:把文件在工作区的修改全部撤销有两种情况:

(1)文件自修改后还没有被放到暂存区,现在撤销修改就回到和版本库一模一样的状态。

(2)文件已经添加到暂存区,又做了修改,现在撤销修改就回到添加到暂存区后的状态。总之,就是让文件回到最近一次git commit或者git add时的状态。

修改文件并添加到了暂存区,庆幸的是在commit之前,用git status查看,修改到了暂存区,还没有提交;

用命令git reset HEAD fasloan_view.py可以把暂存区的修改撤销掉,重新放回工作区。假设不但改错东西,还从暂存区提交到了版本库,就只能回到上一个版本(条件是还没把本地版本库推送到远程)

总结:

(1)当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。

(2)当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD ,就回到了场景1,第二步按场景1操作。

(3)已经提交了不合适的修改到版本库时,想要撤销本次提交,只能回退版本,不过前提是没有推送到远程库。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容

  • (预警:因为详细,所以行文有些长,新手边看边操作效果出乎你的预料) 一:Git是什么? Git是目前世界上最先进的...
    axiaochao阅读 1,901评论 1 8
  • 声明:这篇文章来源于廖雪峰老师的官方网站,我仅仅是作为学习之用 Git简介 Git是什么? Git是目前世界上最先...
    横渡阅读 3,920评论 3 27
  • 一、电脑本地初始化一个仓库 1. git init: 初始化一个电脑上本地仓库 终端进入项目目录,输入: 该命令将...
    dragon_li阅读 2,803评论 1 4
  • git 使用笔记 git原理: 文件(blob)对象,树(tree)对象,提交(commit)对象 tree对象 ...
    神刀阅读 3,714评论 0 10
  • ――2017·7月·桂林水灾有感 呯,呯,呯 从地底而来的声音, 有许许多多的溪流, 组...
    零方程阅读 292评论 2 2