git的使用笔记-转自廖前辈的网站

-------

GIT安装

-------

1.linux安装git

sudo apt-get install git   老一点: sudo apt-get install git-core

2.maxOS安装git

brew install git

3.windows安装git

msysgit是Windows版的Git,从http://msysgit.github.io/下载,然后按默认选项安装即可。安装完成后,在开始

菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!

安装完成后,还需要最后一步设置,在命令行输入:

$ git config --global user.name "Your Name"

$ git config --global user.email "[email protected]"

---------

创建版本库

---------

1.创建版本库--版本库增加文件 ".git" 文件

$ mkdir learngit

$ cd learngit

$ pwd

/Users/michael/learngit

把上面目录变成版本库

$ git init

Initialized empty Git repository in /Users/michael/learngit/.git/

2.

初始化一个Git仓库,使用git init命令。

添加文件到Git仓库,分两步:

第一步,使用命令git add <file>,注意,可反复多次使用,添加多个文件;

第二步,使用命令git commit,完成。

------------------

3.查看当前版本库状态--git status

如果只修改了没有git add

git status尾行显示--no changes added to commit (use "git add" and/or "git commit -a")

如果只git add了 没有git commit

git status第二行显示--Changes to be committed

如果第一次提交的文件没有被git add会显示

Changes not staged for commit:

(use "git add <file>..." to update what will be committed)

(use "git checkout -- <file>..." to discard changes in working directory)

modified:   readme.txt

Untracked files:

(use "git add <file>..." to include in what will be committed)

LICENSE

**************上面代码表示readme.txt文件被修改了,LICENSE从来没被添加过******************

-------

版本回退

-------

1.git log命令显示从最近到最远的提交日志,重要参数 --pretty=oneline

2.git回退版本(回到过去)

在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^

比较容易数不过来,所以写成HEAD~100

$ git reset --hard HEAD^

$ git reset --hard 3628164

回到过去的版本

3.git回到未来版本(回到未来)

git reflog 记录了你每一次git命令

可以用这个回到未来的版本

4.现在总结一下:

HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,git reset --hard commit_id。

穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。

要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

------------

工作区和暂存区

------------

1.工作区--自己本地分支的东西

2.暂存区--git add之后我们认为把代码提交到了暂存区

----------

git管理修改

----------

1.放弃工作区的修改

git checkout -- readme.txt

一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

总之,就是让这个文件回到最近一次git commit或git add时的状态。

$ git status

# On branch master

# Changes to be committed:

#   (use "git reset HEAD <file>..." to unstage)

#

#       modified:   readme.txt

git reset HEAD readme.txt 可以把暂存区的修改撤销掉(unstage),工作区重新变成git add之前的状态

2.git管理小结

git checkout -- readme.txt     放弃工作区的修改

git reset HEAD readme.txt      放弃缓存区的修改回到git add之前的状态

-------

删除文件

-------

1.$ rm test.txt

# Changes not staged for commit:

#   (use "git add/rm <file>..." to update what will be committed)

#   (use "git checkout -- <file>..." to discard changes in working directory)

deleted:    test.txt

rm 直接删除是删除工作区中的文件

a.如果你的目的是把版本库中的也删除,需要git add 然后git commit操作

b.如果你觉得删错了还可以用 git checkout -- test.txt,把该文件从版本库中找回来

2.小结

命令git rm用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢

复文件到最新版本,你会丢失最近一次提交后你修改的内容。

----------

建立远程仓库

----------

1.建立远程仓库

a.创建SSH Key。

在用户主目录下,看看有没有.ssh目录,如果有,再看这个目录下有没有id_rsa和id_rsa.pub

这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash).

创建SSH Key:ssh-keygen -t rsa -C "[email protected]"

b.登陆GitHub,打开“Account settings”,“SSH Keys”页面:

然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:

另一个办法是自己动手,搭一个Git服务器,因为是你自己的Git服务器,所以别人也是看不见的。

c.从github建立远程分支 把git地址记住

touch README.md //新建一个记录提交操作的文档

git init //初始化本地仓库

git add README.md //添加

git commit -m "first commit"//提交到要地仓库,并写一些注释

git remote add origin [email protected]:youname/Test.git //连接远程仓库并建了一个名叫:origin

git push -u origin master //将本地仓库的东西提交到地址是origin的地址,master分支下

2.github问题

/**LINUX命令复习**/

//删除当前文件夹下的所有 name含有.svn 文件

find . -name ".svn" | xargs rm -Rf

//删除当前文件夹下的所有 name含有.git 文件

find . -name ".git" | xargs rm -Rf

/**LINUX命令复习**/

如果输入$ git remote add origin [email protected]:djqiang(github帐号名)/gitdemo(项目名).git

提示出错信息:fatal: remote origin already exists.

解决办法如下:

a、先输入$ git remote rm origin

b、再输入$ git remote add origin [email protected]:djqiang/gitdemo.git 就不会报错了!

c、如果输入$ git remote rm origin 还是报错的话,

error: Could not remove config section ‘remote.origin‘. 我们需要修改gitconfig文件的内容

d、找到你的github的安装路径,

我的是C:\Users\ASUS\AppData\Local\GitHub\PortableGit_ca477551eeb4a6720bb5c8\etc

e、找到一个名为gitconfig的文件,打开它把里面的[remote "origin"]那一行删掉就好了!

如果输入$ ssh -T [email protected]

出现错误提示:Permission denied (publickey).因为新生成的key不能加入ssh就会导致连接不上github。

解决办法如下:

a、先输入$ ssh-agent,再输入$ ssh-add ~/.ssh/id_key,这样就可以了。

b、如果还是不行的话,输入ssh-add ~/.ssh/id_key 命令后

出现报错Could not open a connection to your authentication agent.解决方法是key用Git Gui

的ssh工具生成,这样生成的时候key就直接保存在ssh中了,不需要再ssh-add命令加入了,其它的user,token

等配置都用命令行来做。

c、最好检查一下在你复制id_rsa.pub文件的内容时有没有产生多余的空格或空行,有些编辑器会帮你添加这些的。

如果输入$ git push origin master

提示出错信息:error:failed to push som refs to .......

解决办法如下:

a、先输入$ git pull origin master //先把远程服务器github上面的文件拉下来

b、再输入$ git push origin master

c、如果出现报错 fatal: Couldn‘t find remote ref master 或者

fatal: ‘origin‘ does not appear to be a git repository 以及

fatal: Could not read from remote repository.

d、则需要重新输入$ git remote add [email protected]:djqiang/gitdemo.git

-----------

添加远程仓库

-----------

要关联一个远程库,使用命令git remote add origin [email protected]:path/repo-name.git;

关联后,使用命令git push -u origin master第一次推送master分支的所有内容;

此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;

------------

从远程仓库克隆

------------

$ git clone [email protected]:michaelliao/gitskills.git

Git支持多种协议,默认的git://使用ssh,但也可以使用https等其他协议。

使用https除了速度慢以外,每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议

而只能用https。

------------

创建与合并分支

------------

Git鼓励大量使用分支:

查看分支:git branch

创建分支:git branch <name>

切换分支:git checkout <name>

创建+切换分支:git checkout -b <name>

合并某分支到当前分支:git merge <name>

删除分支:git branch -d <name>

-------

解决冲突

-------

$ git log --graph --pretty=oneline --abbrev-commit  分支合并图

----------

分支管理策略?

----------

主分支     master 最干净的一个分支不在此分支上做任何操作

开发分支   dev    开发人员主要工作的分支,用来做周期开发,快速迭代开发

修改bug   fixbug  修改bug的一个分支

???????????????????非常重要的一章--开始???????????????????

---------

fixbug分支

---------

应用场景

你需要修改一个master(线上)分支的一个很紧急的bug,这个bug需要在1小时内解决,dev分支的功能开发到一半还

需要很长时间(远远大于1小时),这个时候你需要怎么做呢?

你可以这样来做:

git checkout -b fixbug

然后修改bug(现在是在最新从master检出的fixbug分支上修改bug)---修改完成

git add ./

git commit -m ‘修改***的bug‘

git checkout dev

$ git stash

# Saved working directory and index state WIP on dev: 6224937 add merge

# HEAD is now at 6224937 add merge

git status

# From developer.playcrab.com:zhaoqiang/luck_draw

# * branch            dev        -> FETCH_HEAD

# Already up-to-date.

git merge fixbug --no-ff -m ‘修改***的bug后,合并fixbug分支的内容到dev‘

工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:

一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;

另一种方式是用git stash pop,恢复的同时把stash内容也删了

你可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令:

$ git stash apply [email protected]{0}

git stash pop  (这时候你再用git stash list来查看暂存的东西)

git checkout master

git merge fixbug --no-ff -m ‘修改***的bug后,合并fixbug分支的内容到dev‘

然后删除fixbug分支  git branch -d fixbug  (-d销毁fixbug分支  -D强制销毁)

这样做是为了以后dev分支开发完之后和master分支合并的时候不冲突

???????????????????非常重要的一章--结束???????????????????

-------

多人协作

-------

1.当你使用git clone 从远程分支克隆的时候,本地master分支和远程的master分支会自动对应起来,且远程仓库的默认

名称默认为origin

查看远程库的分支git remote  或者详细信息  git remote -v

origin  [email protected]:michaelliao/learngit.git (fetch)

origin  [email protected]:michaelliao/learngit.git (push)

把本地分支推送到远程分支

git push origin 分支名称(本地分支名称一般和远程分支名称是一致的)

# 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 dev origin/<branch>

上面是git pull 失败 需要的步骤

设置dev和origin/dev的链接:

$ git branch --set-upstream dev origin/dev

2.多人协作步骤

因此,多人协作的工作模式通常是这样:

q.首先,可以试图用git push origin branch-name推送自己的修改;

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

c.如果合并有冲突,则解决冲突,并在本地提交;

d.没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!

e.如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,

用命令git branch --set-upstream branch-name origin/branch-name。

这就是多人协作的工作模式,一旦熟悉了,就非常简单。

-------

标签管理

-------

1.git打标签

切换到需要打标签的分支

git tag v1.0   或者

git tag -a <tagname> -m "blablabla..."  指定标签备注的标签

查看所有标签

git tag

查看标签信息

git show v1.0

2.git标签操作

删除标签

$ git tag -d v1.0

推送本地标签到远程

git push origin <tagname>

例如 git push origin v1.0

一次推送本地所有未能推送到远程的标签

$ git push origin --tags

如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:

$ git tag -d v0.9

# Deleted tag ‘v0.9‘ (was 6224937)

$ git push origin :refs/tags/v0.9

# To [email protected]:michaelliao/learngit.git

# - [deleted]         v0.9

--------

自定义git

--------

1.让Git显示颜色,会让命令输出看起来更醒目:

$ git config --global color.ui true

2.配置快捷键

$ git config --global alias.st status  (git status = git st)

$ git config --global alias.co checkout(git checkout = git co)

$ git config --global alias.ci commit  (git commit   = git ci)

$ git config --global alias.br branch  (git branch   = git br)

怎么删除git配置文件的快捷键

只需要到用户主目录找到.gitconfig 文件 把对应的行删除就行了 cd  ~/

或者

git config --global --unset alias.st

查看配置别名

git config --list | grep alias

git config --get-regexp alias

------------

搭建git服务器

------------

前提

搭建Git服务器需要准备一台运行Linux的机器,强烈推荐用Ubuntu或Debian,这样,通过几条简单的apt命令就可

以完成安装。

第一步 安装git服务

$ sudo apt-get install git

第二步,创建一个git用户,用来运行git服务:

$ sudo adduser git

第三步,创建证书登录:

收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到:

/home/git/.ssh/authorized_keys文件里,一行一个。

第四步,初始化Git仓库:

先选定一个目录作为Git仓库,假定是/srv/sample.git,在/srv目录下输入命令:

$ sudo git init --bare sample.git

Git就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服

务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。然后,把owner改为git:

$ sudo chown -R git:git sample.git

第五步,禁用shell登录:

出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行:

git:x:1001:1001:,,,:/home/git:/bin/bash  改为

git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就

自动退出。

第六步,现在,可以通过git clone命令克隆远程仓库了,在各自的电脑上运行:

$ git clone [email protected]:/srv/sample.git

这里我们不介绍怎么玩Gitosis了,几百号人的团队基本都在500强了,相信找个高水平的Linux管理员问题不大。

时间: 2024-11-10 01:30:31

git的使用笔记-转自廖前辈的网站的相关文章

廖雪峰Git教程学习笔记(一)

作者及其背景:仔姜,大三学生,幼儿园英语水平,熟系Linux文件基本操作(最基础的) 文章内容或许有些疏漏之处还望各位大佬见谅,如果构成侵权或出现其他问题,请联系我邮箱:[email protected],如果需要更全的知识请移步廖老师Git教程 学习内容来源:廖雪峰Git教程:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 感谢廖雪峰老师提供的教程 正文开始: Git简介 什

GIT & GitHub 学习笔记

SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活, 干完后,需要把自己做完的活推送到中央服务器.集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网 速慢的话,就纳闷了. Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑 上.既然每个人的电脑都有一个完整的版本库

代码管理工具 --- git的学习笔记四《重新整理git(1)》

1.创建版本库 mkdir  创建目录 cd  地址,到该地址下 pwd 显示当前目录 1.创建目录 $ mkdir startGit $ cd startGit $ pwd 显示当前目录 或者cd到桌面,然后再创建目录 2.初始化版本库 $ git init 初始化仓库 提示信息:Initialized empty Git repository in /Users/xingzai/Desktop/startGit/.git/ 建立一个空的git仓库在/Users/xingzai/Desktop

我的git学习记录------------从廖雪峰老师网站的学习总结

这篇文章只用作自我学习,部分参考来自廖雪峰老师网站 mkdir 路径/文件名(d:/test)  创建文件夹 cd  路径/文件名(cd d:/test)  进入文件夹 pwd   显示当前所出位置的路径   确保全英路径(注意) cd 仓库(repository)文件路径       eg(cd d:/test) git init   初始化空的仓库,把这个目录变成git可以管理的仓库 编写一个readme.txt文件,内容如下: Git is a version control system

版本控制Git实际开发笔记

这里会把自己实际工作当中用到的git操作记录下来,供自己学习: ①新建分支: 在新版本要开发时,会基于最新版本新建一个分支,创建步骤如下: 新建本地分支[注意:这时只存在于本地,远程仓库还没有生成]: 然后切换到新建的本地分支: [说明]:以上两部操作可以合成一个命令:git checkout -b developer_V1.3.0 最后push到远程: 最后去网页中就能看到远程新建了这个分支了: ②删除远程分支: git branch -r -d origin/branch-namegit p

git 的一些笔记

git config git config存在三个地方 :1./.git/config 项目级别2.~/.gitconfig 用户级别3./etc/gitconfig 系统级别 git config -e 查看项目级别的配置git config -e --global 查看用户级别的配置git config -e --system 查看系统级别的配置 添加git用户配置git config user.name “test”git config user.email “[email protect

git的学习笔记整理

git学习较好的网址:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001373962845513aefd77a99f4145f0a2c7a7ca057e7570000 开源中国的git站点:http://git.oschina.net/oschina/git-osc/wikis/Home msysgit是Windows版的Git,从http://msysgit.github.

廖雪峰Git教程学习笔记

廖雪峰git简单教程学习笔记 教程地址:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b0001.可以这样设计目录,在d:\reposisoty\ 在这个目录下面有很多的仓库.mkdir learngitcd learngit>>git init          #这样就把learngit 初始化成了一个仓库>>git status        #说明当前仓库的状态并

Git教程(笔记)

看了廖雪峰写的教程,由浅入深,花了三天的时间学完了,做一下学习笔记吧 Git简介 Linus创建Linux之后为方便管理Linux代码,自己用C写了这个分布式版本控制系统.2008年的时候GitHub网站上线,为开源项目免费提供Git存储. 集中式vs分布式: 集中式版本控制系统,版本库存放在中央服务器,每个人用的都是自己的电脑,用的时候先从服务器上获得新版本,工作完了再推送给中央服务器.缺点是必须联网使用,效率低. 分布式版本控制系统,没有中央服务器,每个人的电脑都是一个完整的版本库,工作的时