Git操作

git用于管理代码的不同版本,能够很快恢复到过去时间段的某个状态。同时在多人合作共同开发中,对于代码的修改与发送,都非常的轻快便捷,不同像在QQ群之间相互传代码的zip压缩包那样麻烦;不会疑惑其他人对代码做了哪些修改。Github/Gitee是运用互联网的思维,将代码存储在上面,通过互联网,我们才能够相互将代码分享。

而对于如何使用git来管理代码,这还需要熟悉一些原理与git命令操作,这样才会得心应手。

Git功能

  • Tracking multiple files together
  • Tracking change
  • Tracking history version (tracking 跟踪)

本机离线操作

在自己的电脑上管理代码local,其中涉及到三个空间概念: working directory存储在硬盘上的普通文件,staging area与add有关和repository与commit有关

concept map

git -version

查看git的版本

git log

查看提交的日志,其中那一串数字是commitID指向每个历史版本,按照时间从现在往之前推。q退出。

git log --graph --oneline

查看分支合并情况,类似图形界面

也可查看专门的分支

git log --graph --oneline master  分支名称

git diff

git diff commitID(之前) commitID(之后)

比较在repository中两个版本的不同,如取3aa08b92180bea3f594340f87d0d51e4a99edd87d07738fb19f551ea8d767f9fde6c4b702d0923ef进行比较,通过颜色或(-,+)等信息观察变化,可以只输入前面四个字符即可

image.png

表示新添了内容,该内容是新信息

git diff

场景: 该文件已经通过add加入到了staging area但是未加入到repository,而此时你去处理别的事情了(比如上厕所),回来的时候你想知道staging area的文件是否是最新的文件,因为你可能忘了,将该文件加入staging area后你是否又修改了该文件。

比较的是同文件在working area与staging area的状态

git diff --staged

比较的是staging area与repository中最新的”快照”

git checkout

git checkout master

回到主分支

git checkout 分支名称

该分支可以是本地的分支,也可以是远程的分支

切换到该分支

git checkout commitID

access old versions of files.可以回到这个commitID指向的当时版本。使用它,我们可以查看bug在那一次提交引入的。

git init

将一个文件夹初始化为一个 git repository(git 仓库)

git status

查看当前的文件状态,是否是添加到repository中还是在staging area状态

git add

将文件加入到staging area准备提交到本地的repository

git add .   表示将全部文件添加到staging area中
git add 文件名  只将该文件加入

git commit

A commit is a snapshot of git repository(快照)
提交commit会记录打log日志中,为了日后方便通过日志来跟踪代码的更改,应该遵循的原则是:

It‘s make one commit per logical change and give each commit a good message.(每跟换一次逻辑,进行一次提交)

git commit直接回车会打开sublime编辑器,进行更加详细的信息编辑(前提是需要配置sublime)

也可以使用git commit -m "message"在命令行快速写入信息

配置sublime

切换到Home目录下

cd ~

在Home路径下创建.bash_profile文件,在文件中添加,sublime的安装路径,注意转义

alias subl="C:/Program\ Files/Sublime\ Text\ 3/sublime_text.exe"

以后就可以在bash下使用subl 文件名来打开文件进行编辑

git branch

git branch

查看当前有哪些分支

git branch 分支名称

创建该分支

为什么创建分支

比如开发一个游戏正版的难度是3星,但是你觉得太难,于是想改代码实现一个2星级别的,但是正式版本是3星,你能让正式版本变成2星,于是你需要在这个基础上开一个分支,在该分支上你可以自己改写代码而不用影响主支master的代码。换而言之,你可以在分支上干自己想干的事,大胆的更改代码,而不用担心影响主分支master

git branch -d 分支名称

删除分支

git merge

合并分支,将两个分支上的代码,合并整合到一个分支上,其中不可避免的时conflict(冲突)

git merge branch1 branch2

将分支branch2合并到branch1
相当于 git checkout branch1 然后 git merge branch2

git merge --abort

取消合并

冲突问题

当冲突发生时,查看发生冲突的文件,这时候两个分支都是对原来的状态进行了修改,需要打开文件进行改写。如:

打开subl hello.txt文件,处理冲突:

<<<<<<< HEAD     表示HEAD指向的当前分支,此时为: different-oil
different information.




||||||| merged common ancestors   表示原始的内容,此时表示原来是空的



=======
master money
>>>>>>> master            表示master分支改动的地方

以上信息表示,master与different-oil都对原来的hello.txt状态进行了内容的增添,所以我们处理成这样,将两个分支添加的内容都添加进来。

different information.

master money
git show commitID

因为两个分支合并后,commit的时间是交错的,要想查看这个commit的快照与在合并之前的分支上的前一个commit快照的对比,这个命令可以做到。

compare a commit to its parent

Fast-forward-Merges

merging into is an ancestor of the branch that you're merging from

Github与本地local

Concept Map

SSH Key

Gitee(码云)、Github同时配置ssh key

在 ~/.ssh目录下
$ ssh-keygen -t rsa -C "xxxxxxx@qq.com" -f "github_id_rsa"
$ ssh-keygen -t rsa -C "xxxxxxx@qq.com" -f "gitee_id_rsa"
ssh -T git@gitee.com
ssh -T git@github.com

git remote

git remote

显示本地仓库与远程Github仓库上的连接

git remote -v 显示详细信息 v指verbose

git remote add origin git@...

将自己本地仓库与github仓库关联起来。(在github上新建一个repository最好勾选上README.md这样会产生第一次提交,然后在本地仓库执行该命令)注意与git clone的区别

关联之后就可以使用 git push origin mastergit push origin 分支 往github上提交文件了。(前提是要分配好SSH Key密钥) 其中origin代表远程

git remote add

git clone git@...

将github上的仓库克隆下来,作为本地的仓库。

git pull

当远程的Github仓库的内容改变时。
拉取Github上的代码与本地仓库的代码进行合并。

如果仓库只有自己一个人使用,那么在线上即Github上更改了某个文件,此时就需要git pull origin master远程的代码下来,进行合并,解决冲突。更常见的情况是,多人向一个仓库贡献代码,此时在你就需要pull远程,在本地解决冲突后,在pull request到贡献的仓库。

git pull origin master 相当于 依次执行了 git fetch origingit merge master origin/master

fork

这是在github通过fork其他人的仓库,将该仓库复制到自己github上的仓库中。

fork & clone & branch之间的区别

pull request

这个是在github上操作的,表示向fork的项目贡献代码。如: 在自己本地仓库(clone的fork的那个仓库)中创建了一个分支,在该分支上我们进行代码修改,然后将分支提交到我们fork的到自己github的仓库,然后在自己的github上的这个仓库上进行pull request.

当我们进行pull request后,fork的原来的项目的主人会受到信息,然后查看你pull request过去的版本是否符合要求,然后决定是否合并到他的项目master中。

pull request冲突

如:
1) 在自己的分支上修改,pull request到fork的原生项目时,发现有冲突
2) 在自己本地仓库中切换到master主分支,然后git pull拉取远程fork的仓库的master,因为我们修改代码都是在其他分支上,master主分支与远程的master合并时是Fast-forward merges,一般不会有冲突。

git pull 远程fork的SSH地址

或者

git remote add upstream 远程fork的SSH地址       //这个只执行一次就好
git pull upstream master                //以后再拉取远程fork仓库的代码时,就执行这个即可

3)将master更新git push orgin master到自己github的仓库
4)切换到分支,与master进行合并,解决冲突,在提交到自己的仓库,进行pull request

各个空间的改变

Courses

Problem

git pull

Problem-1

fatal: refusing to merge unrelated histories

Solved

git pull origin master --allow-unrelated-histories

Problem-2

There is no tracking information for the current branch.
    Please specify which branch you want to merge with.
    See git-pull(1) for details

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream develop origin/<branch>

Solved

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