Git教程

本人首次发表和总结自己学的东西,有不好的地方请指出

一、git上传项(安装Git)

         Git上传项目有两种方法:一种https方法,一种ssh方法

         https方法:

         1、首先登录github.com注册账号创建一个newrespository

         2、安装git,教程自行百度搜索

         3、在本地项目上右击git base here在命令行中输入git init项目加入git管理

         4、输入git add . (不要忘记“.”),将项目所有文件内容添加到git中

         5、输入git commit –m “first commit(提示信息随意输入)”

         6、输入git remote add origin https://github.com/youname/xiangmuming.git,链接你的github仓库

         7、输入git push –u origin master,上传你的项目到github,会要求输入你的github账号和密码

         到此首次上传提交项目成功

注意:

另外,这里有个坑需要注意一下,就是在上面第1步创建远程仓库的时候,如果你勾选了Initializethis repository with a README(就是创建仓库的时候自动给你创建一个README文件),那么到了第7步你将本地仓库内容推送到远程仓库的时候就会报一个failed to push somerefs to https://github.com/guyibang/TEST2.git的错。

这是由于你新创建的那个仓库里面的README文件不在本地仓库目录中,这时我们可以通过以下命令先将内容合并以下:

git pull --rebase origin master

这时你再push就能成功了。

Git常用命令

Git status 查看工作区的状态

Git diff 查看修改过的内容

 

二、时光穿梭机

    一、版本回退

输入git log(或者git log –pretty=oneline)查看提交历史

输入 git reset --hard HEAD^(^回退上一个版本,^^回退前一个版本,100输入HEAD~100),或者输入 git reset --hard commit_id(提交历史id)

输入git reflog查看命令历史,以便确定要回到未来的哪个版本

 

    二、工作区和暂存区(stage)

文件修改之后首先添git add +文件名到暂存区(stage),然后提交git commit –m “提交注释”

 

    三、管理修改

Git跟踪并管理的是修改,而非文件

理解Git如何跟踪修改的:每次修改,如果不git add到暂存区(stage),那就不会加入到commit中

    四、撤销修改

1、命令git checkout --readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

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

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

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

2、如果已经添加到暂存区中可以使用git reste HEAD file(文件名)可以把暂存区的修改撤销。

git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本

3、如果已经提交,可以进行版本回退操作

    五、删除文件

从版本库中删除:

rm filename -> git rm filename -> git commit –m “注释”

删错了:git checkout filename

 

 

 

三、远程仓库

生成SSH key :ssh-keygen –T rsa –C “          邮箱”;登录github设置ssh key

    一、添加远程仓库

申请github账号,创建一个项目

本地git仓库与远程仓库关联

Git remote add origin git@github.com:yougithubaccount/xiangmu.git

本地项目推送到远程仓库 git push –u origin master (首次推送添加 –u,以后推送不再需要-u)

,推送master分支的所有内容

    二、克隆

使用git clone + 地址

Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。

四、分支管理

    一、创建与合并分支

1、创建并切换分支:git checkout –b dev 

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

Git branch dev (创建)、git checkout dev(切换分支)

2、查看当前分支 git branch (列出所有分支,分支前*号表示)

3、工作区的操作正常操作

4、合并分支:

   首先切换到主分支master,

   执行git merge dev 用于指定分支合并到当前分支

5、删除分支: git branch –d dev 删除后查看分支git branch

合并冲突解决方案:

6、合并产生冲突,在主分支手动解决冲突,之后重新提交,合并完成

git log --greph查看分支合并图(或者git log --graph--pretty=oneline --abbrev-commit

    二、分支合并策略

通常情况下,合并分支,如果可能,git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。

如果强制禁止Fast forward模式,git就会在merge时生成一个新的commit,这样从分支历史上就可以看出分支信息了。

--no-ff方式的git merge(合并分支)

合并输入(禁用fast forward模式):git merge --no-ff –m “注释” dev

(因为本次合并要产生一个新的commit,所以加上-m参数,把commit描述写进去)

    三、bug分支

修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;

当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。

 

存储当前工作状态:git stash

查看存储的工作状态列表:git stash list

取回工作状态:

1、git stash apply(取出最新存储工作状态恢复后,stash不会删除),git stash drop(删除)

2、git stash pop(恢复工作状态的同时,删除stash信息)

恢复指定的工作状态:git stash apply stash@{0}

强制删除分支:

创建一个分支,添加一个新的功能,待开发完毕后,接到任务不需要该功能,然后我们删除分支git branch –d dev,这是提示我们删除失败,因为dev分支没有合并,需要强制删除,输入命令:git branch –D dev(把“-d”换成“-D”就是强制删除

 

五、分支管理

    一、查看远程库信息

1、  查看远程库信息:git remote

2、  查看详细信息:git remote –v

    二、推送分支

1、  推送分支:git push origin master(主分支,其他分支git push origin dev)

    三、抓取分支

1、创建远程分支:git checkout –bdev origin/dev

2、本地分支与远程分支建立关联:git branch --set-upstream dev origin/dev

五、标签管理

发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。

Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支很像对不对?但是分支可以移动,标签不能移动),所以,创建和删除标签都是瞬间完成的。

Git有commit,为什么还要引入tag?

“请把上周一的那个版本打包发布,commit号是6a5819e...”

“一串乱七八糟的数字不好找!”

如果换一个办法:

“请把上周一的那个版本打包发布,版本号是v1.2”

“好的,按照tag v1.2查找commit就行!”

所以,tag就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起。

    一、创建标签

1、创建标签:git tag <name>(默认标签是打在最新的提交的commit上)

2、查看所有标签:git tag

3、如果昨天的忘记打标签怎么办?

         首先,找到历史提交的commit_id,然后打上标签。

         输入:git log –abbrev-commit(或者git log --pretty=oneline --abbrev-commit)

         找到需要打标签的commitid,

输入 :git tag v0.9 commitid

4、查看标签的信息:git show tag

5、创建带有说明的标签,-a指定表签名,-m指定说明文字:

   Git tag –a v0.9 –m “注释” commitid

还可以通过-s用私钥签名一个标签:

git tag -s v0.2 -m "signed version 0.2 released" commit id:签名采用PGP签名,因此,必须首先安装gpg(GnuPG),如果没有找到gpg,或者没有gpg密钥对,就会报错

    二、删除标签

1、删除本地标签:git tag –d <tagname>

2、推送指定本地标签:git push origin <tagname>

3、推送所有的标签:git push origin --tags

4、删除远程标签:

首先删除本地标签:git tag –d <tagname>;

然后删除远程标签:git push origin :refs/tags/<tagname>

 

删除已有的关联的远程仓库:git remoterm origin

六、关联多个远程仓库

1、删除已关联的远程仓库:

         Gitremote rm <name>(远程仓库的名字,自己命名的)

2、  关联第一个远程仓库:git remote add github git@github.com:youname/project.git

因为关联的github所以起名github

3、  关联第二个远程仓库:git remote add gitee git@gitee.com:younmae/project.git

因为关联的码云所以起名gitee

4、  推送命令分为两个:

Git push github master; git push giteemaster

七、自定义Git

    一、忽略特殊文件

在Git工作区的根目录下创建一个特殊的“.gitignore” 文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。

不需要从头写.gitignore文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了。所有配置文件可以直接在线浏览:https://github.com/github/gitignore

忽略文件的原则是:

1、忽略操作系统自动生成的文件,比如缩略图等;

2、忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;

3、忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。

例如python开发:

# Windows:自动生成的文件需要忽略

Thumbs.db

ehthumbs.db

Desktop.ini

 

# Python:python编译时产生的文件需要忽略

*.py[cod]

*.so

*.egg

*.egg-info

dist

build

 

# My configurations:自己写的定义的一些文件需要忽略

db.ini

deploy_key_rsa

 

最后提交Git

强制提交忽略的文件:git add –f filename

添加文件有问题,检查忽略文件:git check-ignore           -vfilename

    二、Git 命令配置别名

--global参数是全局参数,也就是这些命令在这台电脑的所有Git仓库下都有用

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   ---->gitci

git config --global alias.br branch    ---->gitbranch    ---->git br

git config --global alias.unstage 'resetHEAD'  ---->git reset HEAD file  ---->git unstage file

git config –global alias.last 'log  -1' ---->git log -1     ---->gitlast

 

甚至还有人丧心病狂地把lg配置成了:

git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

来看看git lg的效果:

配置文件:

配置Git的时候,加上--global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用。

配置文件放哪了?每个仓库的Git配置文件都放在.git/config文件中:

$ cat .git/config 
[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
    precomposeunicode = true
[remote "origin"]
    url = git@github.com:michaelliao/learngit.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[alias]
    last = log -1

别名就在[alias]后面,要删除别名,直接把对应的行删掉即可。

而当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中:

$ cat .gitconfig
[alias]
    co = checkout
    ci = commit
    br = branch
    st = status
[user]
    name = YourName
    email = your@email.com

配置别名也可以直接修改这个文件,如果改错了,可以删掉文件重新通过命令配置。

    三、搭建Git服务器

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

假设你已经有sudo权限的用户账号,下面,正式开始安装。

1、  安装Git : sudo apt-get install git

2、  创建Git用户,用来运行Git服务:sudo adduser git

3、   创建登录证书:收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。

4、   初始化Git仓库:选定一个目录:sudo git init --bare sample.git;Git就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。然后,把owner改为git:sudo chown -R git:git sample.git

5、  禁用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每次一登录就自动退出。

6、克隆远程仓库:git clone git@server:/srv/sample.git

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值