git学习

来源:互联网 发布:社区论坛源码 编辑:程序博客网 时间:2024/06/15 17:52
转-感谢

[1 廖雪峰老师]
(http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000)

[2 GIT分支管理是一门艺术]
(http://kb.cnblogs.com/page/132209/)

[3 git的分支概念]
(http://www.cnblogs.com/super-d2/p/3340849.html)

安装git

1 创建版本库/创建目录

$ mkdir learngit$ cd learngit$ pwd$ git init$ git commit -m "wrote a readme file"

2 配置

  • 当前用户的Git配置文件放在用户主目录(可能为工作区上一级目录)下的一个隐藏文件.gitconfig中
$ git config --global user.name "ahoo"$ git config --global user.email "294977"$ git config --global color.ui true

3 忽略:用notepad 另存为创建.gitignore文件,在里面添加需要忽略的文件和路径。

$ git add .gitignore  ;git commit -m "add .gitignore file"$ git status ;查看是否忽略了。$ git check-ignore -v  needIgnorefilename ; 检查语法。$ git add -f alreadyIgnorefilename ;强制添加已经忽略的文件。

4 指令起别名。

- global 是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用。$ git config --global alias.st status$ git config --global alias.co checkout$ git config --global alias.ci commit$ git config --global alias.br branch$ git config --global alias.unstage 'reset HEAD'$ git config --global alias.last 'log -1'  $ 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仓库,使用git init命令。添加文件到Git仓库,分两步:第一步,使用命令git add <file>,注意,可反复多次使用,添加多个文件;第二步,使用命令git commit,完成。git add readme.txtgit commit -m "wrote a readme file"git statusgit diff readme.txt 

版本回退

现在总结一下:HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。$ git log$ git log --pretty=oneline$ git reset --hard HEAD^ d5fd4298b07a9e7029f7f6bd4a1e7823e4443553$ git reset --hard d5fd4298b07a9e$ git reflog$ cat readme.txt写一个readme.txt,里面有句话想放弃。退回。第一步:查看 git status 看提交到暂存区没有。没有: git checkout -- readme.txt 直接退回工作区。有:git reset HEAD readme.txt  退回暂存区修改,第二b步: git checkout -- readme.txt  退回工作区。 cat readme.txt 查看。

删除工作区/仓库文件

命令git rm用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。rm : 工作区删除-1确定要删git rm: 版本库删除git commit -m “remove”-2删错了git checkout -- test.txtgit checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

创建远程库

要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git;关联后,使用命令git push -u origin master第一次推送master分支的所有内容;此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;---------$ git remote add origin git@(从这开始是本地服务器) github.com:(从这github)michaelliao/learngit.git$ git push -u origin master把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。

解决分支冲突:

 git log ;进入 git log 以后 按 q 退出。 git log --graph :简单的合并图 $ git log --graph --pretty=oneline --abbrev-commit   :复杂。

非快速合并:

git merge --no-ff -m "merge with no-ff" dev

分支策略:master 发布版本的。 dev: 干活的。 每个人都有自己的分支。

bug fix

修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。 第一步:$ git stash 第二部:git checkout master(需要修复bug的分支)   第三步:git checkout -b  bug101 第四步:git checkout bug101 第五步:git add xx   / git commit -m " xx" 地六步:git checkout master ;  git merge --no-ff -m "merged bug fix 101" bug101            $ git branch -d issue-101            $ git checkout dev            $ git stash list            $ git stash pop $ git stash list git stash apply  ; git stash drop $ git stash pop 相当于上面两条。

feature分支–开发新功能

开发一个新 feature, 最好新建一个分支;如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。

标签

命令git tag <name>用于新建一个标签,默认为HEAD,也可以指定一个commit id;git tag -a <tagname> -m "blablabla..."可以指定标签信息;git tag -s <tagname> -m "blablabla..."可以用PGP签名标签;命令git tag可以查看所有标签。$ git tag v1.0$ git tagv1.0$ git log --pretty=oneline --abbrev-commit$ git tag v0.9 6224937$ git show v0.9$ git tag -a v0.1 -m "version 0.1 released" 3628164

删除标签:

如果标签打错了,也可以删除:$ git tag -d v0.1Deleted tag 'v0.1' (was e078af9)因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。

推送标签

如果要推送某个标签到远程,使用命令git push origin <tagname>:$ git push origin v1.0Total 0 (delta 0), reused 0 (delta 0)To git@github.com:michaelliao/learngit.git * [new tag]         v1.0 -> v1.0或者,一次性推送全部尚未推送到远程的本地标签:$ git push origin --tagsCounting objects: 1, done.Writing objects: 100% (1/1), 554 bytes, done.Total 1 (delta 0), reused 0 (delta 0)To git@github.com:michaelliao/learngit.git * [new tag]         v0.2 -> v0.2 * [new tag]         v0.9 -> v0.9

删除远程标签

如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:$ git tag -d v0.9Deleted tag 'v0.9' (was 6224937)然后,从远程删除。删除命令也是push,但是格式如下:$ git push origin :refs/tags/v0.9To git@github.com:michaelliao/learngit.git - [deleted]         v0.9要看看是否真的从远程库删除了标签,可以登陆GitHub查看。

操作标签

命令git push origin <tagname>可以推送一个本地标签;命令git push origin --tags可以推送全部未推送过的本地标签;命令git tag -d <tagname>可以删除一个本地标签;命令git push origin :refs/tags/<tagname>可以删除一个远程标签。删除远程标签:先删除本地标签,再删除远程标签。

远程仓库–需要先添加mykey

$ ssh-keygen -t rsa -C “youremail@example.com”

你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。
如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

0 0
原创粉丝点击