您的位置:首页 > 其它

Git简单教程

2018-03-14 14:36 134 查看

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

一、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账号和密码
         到此首次上传提交项目成功
注意:
另外,这里有个坑需要注意一下,就是在上面第七步创建远程仓库的时候,如果你勾选了Initializethis repository with a README(就是创建仓库的时候自动给你创建一个README文件),那么到了第九步你将本地仓库内容推送到远程仓库的时候就会报一个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.dbehthumbs.dbDesktop.ini # Python:python编译时产生的文件需要忽略*.py[cod]*.so*.egg*.egg-infodistbuild # My configurations:自己写的定义的一些文件
b2ae
需要忽略db.inideploy_key_rsa 最后提交Git强制提交忽略的文件:git add –f filename
添加文件有问题,检查忽略文件:git check-ignore           -vfilename

    二、Git 命令配置别名

--global参数是全局参数,也就是这些命令在这台电脑的所有Git仓库下都有用
git config --globalalias.st status     ----> git status    ---->git st
git config --globalalias.co checkout  ---->git checkout  ---->git co
git config --globalalias.ci commit    ---->git commit   ---->gitci
git config --globalalias.br branch    ---->gitbranch    ---->git br
git config --globalalias.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"[/code]来看看
git lg
的效果:

配置文件:配置Git的时候,加上
--global
是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用。配置文件放哪了?每个仓库的Git配置文件都放在
.git/config
文件中:
$ [code]cat .git/config
[core]
    repositoryformatversion =
0[/code]
    filemode =
true[/code]
    bare =
false[/code]
    logallrefupdates =
true[/code]
    ignorecase =
true[/code]
    precomposeunicode =
true[/code]
[remote
"origin"
]
    url = git
@github
.
com:
michaelliao/learngit.git
    fetch = +refs/heads/*
:refs/remotes/origin/*[/code]
[branch
"master"
]
    remote = origin
    merge = refs/heads/master
[
alias
]
    last = log -
1[/code]别名就在
[alias]
后面,要删除别名,直接把对应的行删掉即可。而当前用户的Git配置文件放在用户主目录下的一个隐藏文件
.gitconfig
中:
$ [code]cat .gitconfig
[
alias
]
    co = checkout
    ci = commit
    br = branch
    st = status
[user]
    name =
YourName[/code]
    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:[code],,,
:/home/git:/bin/bash[/code]改为:
git:x:1001:1001:[code],,,
:/home/git:/usr/bin/git-shell[/code]这样,
git
用户可以正常通过ssh使用git,但无法登录shell,因为我们为
git
用户指定的
git-shell
每次一登录就自动退出。6、克隆远程仓库:git clone git@server:/srv/sample.git
 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Git Git教程 教程