git初级教程

本文参考廖雪峰的git教程编写

Git,据说是世界上最好的分布式版本控制系统

下载安装:
https://git-scm.com/download/

从开始菜单或者任意目录右击打开Git Bash

用户设置:
git config --global user.name "Your Name"
git config --global user.email "[email protected]"

找个合适的目录打开Git Bash,将目录变成Git可以管理的仓库:
git init
这个时候在当前目录下会出现一个.git目录,这个目录就是git用来跟踪管理版本库的,并且该目录是由git管理的,一般情况下不需要手动修改这个目录中的文件。

SSH设置:
ssh-keygen -t rsa -C "[email protected]"
你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。
如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
访问http://120.26.206.23/profile/keys
然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容。

工作区:
在电脑中能看到的目录就是工作区

版本库:
工作区有一个隐藏目录.git,这个目录是Git的版本库。

Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。(包括自己创建的其它分支和指向分支的指针)

举例:
运行git status,
$ git status
On branch master
Initial commit
nothing to commit (create/copy files and use "git add" to track)
这时会发现没有内容被改变。
在当前的git目录中创建一个test.txt,接着运行git status,
$ git status
On branch master
Initial commit
Untracked files:
(use "git add <file>..." to include in what will be committed)
test.txt
nothing added to commit but untracked files present (use "git add" to track)
Git非常清楚地告诉我们,readme.txt被修改了,而LICENSE还从来没有被添加过,所以它的状态是Untracked。
接着test.txt就存在于工作区,然后运行git add test.txt,add命令就是把所有的修改提交到暂存区(stage)。
然后执行git commit -m "add test.txt"。
commit命令会把暂存区所有的内容提交到当前的分支(master)。
一旦提交之后在运行git status,就会发现工作区又变得干净了,当前没有文件被修改,暂存区也是干净的。
在这里务必要搞清楚工作区,暂存区和版本库的概念。如果看一遍没有搞清楚,可以多看几遍,或者谷歌其它资料脑补。
每次修改文件后一定要记得先add到暂存区,然后再commit,才能正确的把对文件的修改提交到版本库。

查看工作区内容的改变:
git status

将工作区的改变提交到暂存区:
git add ...
git add -A  提交所有更新

将暂存区的改变提交到版本库:
git commit -m ""

查看文件之间的变化:
git diff ...
git diff 版本号 -- file
git diff HEAD -- file(查看工作区和版本库里面最新版本的区别)

将本地版本库内容导出到工作空间(.或者*代表全部文件):
git checkout -- file
git checkout -- *

撤销工作区的修改
git checkout -- file
命令git checkout -- file,就是把file文件在工作区的修改全部撤销,这里有两种情况:
一种是file自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是file已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。

将提交到暂存区的修改退回到工作区
git reset HEAD file

删除文件
删除文件系统中的file
git rm file
git commit -m "delete file"
这会从版本库删除file

版本回退
git reset --hard 版本号

关联远程库:
git remote add origin [email protected]:micromall/web-java.git

克隆远程仓库
git clone [email protected]:micromall/web-java.git

查看远程库信息
git remote
git remote -v

拉取远程库的rongze分支到本地的master:
git pull origin rongze:master

推送本地master改变到远程rongze分支:
git push origin master:rongze

查看git命令历史:
git reflog

分支管理
分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。
现在有了分支,就不用怕了。你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。

创建分支
git branch rogze
git checkout -b rongze
-b表示创建并且切换到rongze分支
等价于git branch rongze,git checkout rongze

查看分支
git branch
该命令会列出所有分支,当前分支以*标记

切换分支
git checkout rongze

合并分支
git merge rongze
合并当前分支和指定分支

删除分支
git branch -d rongze
git branch -D rongze

查看分支合并情况
git log --graph --pretty=oneline --abbrev-commit

普通模式合并分支
git merge --no-ff -m "merge with no-ff" dev
通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。

存储工作现场
git stash
可以存储当前工作现场
$ git stash
Saved working directory and index state WIP on dev: 6224937 add merge
HEAD is now at 6224937 add merge

查看stash
git stash list
$ git stash list
stash@{0}: WIP on dev: 6224937 add merge
stash@{1}: WIP on dev: 6224938 add merge

恢复工作现场
一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
另一种方式是用git stash pop,恢复的同时把stash内容也删了;
你可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令:git stash apply stash@{0}

创建标签
发布一个版本时,我们通常先在版本库中打一个标签,这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。
切换到需要打标签的分支,运行git tag tagnam,这样就标签就打好了。
用git tag就可以查看所有标签。
标签是默认打在最新提交的commit上的。
如果需要给之前的版本打标签,就运行git tag tagname 版本号
git tag -a tagname -m "..." ,可以指定标签信息。

查看标签
git show tagname

删除标签
git tag -d tagname

删除远程标签
git tag -d tagname,首先删除一个本地标签
git push origin :refs/tags/tagname,删除远程标签

推动标签到远程
git push origin tagname
git push origin --tags可以推送全部未推送过的本地标签

忽略特殊文件
有些时候,你必须把某些文件放到Git工作目录中,但又不能提交它们。
在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。
忽略文件的原则是:
忽略操作系统自动生成的文件,比如缩略图等;
忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
一个实例的.gitignore文件,内容如下:
# Windows:
Thumbs.db
ehthumbs.db
Desktop.ini

# Python:
*.py[cod]
*.so
*.egg
*.egg-info
dist
build

# My configurations:
db.ini
deploy_key_rsa

使用github
首先,登陆GitHub,打开“Account settings”,“SSH Keys”页面:
然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容(该文件在用户文件夹下的.ssh文件夹内)。
然后,在右上角找到“Create a new repo”按钮,创建一个新的仓库。
在Repository name填入test,其他保持默认设置,点击“Create repository”按钮,就成功地创建了一个新的Git仓库。
然后在本地运行git remote add origin [email protected]:414011733/test.git,记住要把414011733替换成自己的github账户名
接着运行git push -u origin master,将本地的master推送到github,-u参数会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

猜你喜欢

转载自cc414011733.iteye.com/blog/2286088