赞
踩
sudo apt-get install git
或者
sudo apt-get install git-core
官网 下载 (不过比较慢)
CSDN 下载(Windows 64位系统,Git 版本为:2.18)
然后按默认选项安装即可.
查看是否安装成功:Win + R
-> cmd
-> git
安装完成后,还需要最后一步设置(你的名字和Email地址),在命令行输入下面两条命令:
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
1、创建 Git 版本库(目录路径中最好不要包含中文)
2、把目录变成Git可以管理的仓库
然后同级目录下多了一个.git
的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。
3、把文件添加到版本库 git add 文件名
4、用命令git commit
告诉Git,把文件提交到仓库
简单解释一下git commit
命令,-m
后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
git commit
命令执行成功后会告诉你,1 file changed
:1个文件被改动(我们新添加的readme.txt文件);2 insertions
:插入了两行内容(readme.txt有两行内容)。
5、总结
初始化一个Git仓库,使用git init
命令。
添加文件到Git仓库,分两步:
git add <file>
,注意,可反复多次使用,添加多个文件;git commit -m <message>
,完成。commit
可以一次提交很多文件,所以你可以多次add
不同的文件,比如:$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."
修改文件内容,在文件中添加add:2019_1009_11:05
,运行git status
命令看看结果:
git status
命令可以让我们时刻掌握仓库当前的状态,上面的命令输出告诉我们,readme.txt
被修改过了,但还没有准备提交的修改。
git diff
这个可以让我们看到具体修改了什么内容
总结
git status
命令。git status
告诉你有文件被修改过,用git diff
可以查看修改内容。如果误删了文件,还可以从最近的一个commit
恢复,然后继续工作,而不是把几个月的工作成果全部丢失
1、git log
命令显示从最近到最远的提交日志,如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline
参数:
2、在Git中,用HEAD
表示当前版本,上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^
比较容易数不过来,所以写成HEAD~100
。退回到上一个版本可以使用git reset
命令:
3、返回上次的版本
当要返回到上一次的版本并且没有版本号(版本 ID)时,Git提供了一个命令git reflog
用来记录你的每一次命令:
总结:
HEAD
指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id
。git log
可以查看提交历史,以便确定要回退到哪个版本。git reflog
查看命令历史,以便确定要回到未来的哪个版本。
我们把文件往Git版本库里添加的时候,是分两步执行的:
git add
把文件添加进去,实际上就是把文件修改添加到暂存区;git commit
提交更改,实际上就是把暂存区的所有内容提交到当前分支。git checkout -- <filename>
撤销命令git checkout -- lemon.txt
意思就是,把lemon.txt
文件在工作区的修改全部撤销,这里有两种情况:
lemon.txt
自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;lemon.txt
已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。总之,就是让这个文件回到最近一次git commit
或git add
时的状态。
git reset HEAD <filename>
撤销用命令git reset HEAD <file>
可以把暂存区的修改撤销掉(unstage),重新放回工作区,当我们用HEAD
时,表示最新的版本。
git checkout -- file
。git reset HEAD <file>
,就回到了场景1,第二步按场景1操作。rm <filename>
删除
查看文件状态发现:版本库中的文件并没有删除
git rm <filename>
删除
查看文件状态发现:版本库中的文件已经删除
命令git rm
用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容
远程仓库就是可以把自己本地版本库里的文件上传到的服务器仓库,然后其他人可以通过这台服务器仓库提取和提交。
远程仓库比较主流的有三个:GitHub、码云、CODING
在用户主目录下(C:/Users/Administrator),看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa
和id_rsa.pub
这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:$ ssh-keygen -t rsa -C "youremail@example.com"
如果一切顺利的话,可以在用户主目录里找到.ssh
目录,里面有id_rsa
和id_rsa.pub
两个文件,这两个就是SSH Key的秘钥对,id_rsa
是私钥,不能泄露出去,id_rsa.pub
是公钥,可以放心地告诉任何人。
登陆CODING,打开“个人设置”,“SSH 公钥”页面, 点击”新增公钥“。然后,填上任意Title,在Key文本框里粘贴id_rsa.pub
文件的内容
新建项目,代码浏览
把复制的地址 粘贴到命令行即可
Git鼓励大量使用分支:
git branch
git branch <name>
git checkout <name>
或者git switch <name>
git checkout -b <name>
或者git switch -c <name>
git merge <name>
git branch -d <name>
git log --graph
命令可以看到分支合并图。通常,合并分支时,如果可能,Git会用Fast forward
模式,但这种模式下,删除分支后,会丢掉分支信息。如果要强制禁用Fast forward
模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
$ git merge --no-ff -m "merge with no-ff" dev //准备合并dev分支,请注意--no-ff参数,表示禁用Fast forward
在实际开发中,我们应该按照几个基本原则进行分支管理:
master
分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活,那在哪干活呢?干活都在dev
分支上,也就是说,dev
分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev
分支合并到master
上,在master
分支发布1.0版本;你和你的小伙伴们每个人都在dev
分支上干活,每个人都有自己的分支,时不时地往dev
分支上合并就可以了。所以,团队合作的分支看起来就像这样:--no-ff
参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward
合并就看不出来曾经做过合并。在Git中,由于分支是如此的强大,所以,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。
当你接到一个修复一个代号101的bug的任务时,很自然地,你想创建一个分支issue-101
来修复它,但是,等等,当前正在dev
上进行的工作还没有提交,这时该怎么办呢??
Git还提供了一个stash
功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作
总结:
git stash
一下,然后去修复bug,修复后,再git stash pop
,回到工作现场;git cherry-pick <commit>
命令,把bug提交的修改“复制”到当前分支,避免重复劳动。如果做好了的工作需要销毁的话:$ git branch -d <filename>
如果销毁失败。Git友情提醒,filename
分支还没有被合并,如果删除,将丢失掉修改,如果要强行删除,需要使用大写的-D
参数。。
总结:
git branch -D <name>
强行删除。当你从远程仓库克隆时,实际上Git自动把本地的master
分支和远程的master
分支对应起来了,并且,远程仓库的默认名称是origin
。
要查看远程库的信息,用git remote
;或者,用git remote -v
显示更详细的信息
推送分支
推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上:
$ git push origin master
如果要推送其他分支,比如dev
,就改成:
$ git push origin dev
但是,并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要呢?
master
分支是主分支,因此要时刻与远程同步;dev
分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;bug
分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;总之,就是在Git中,分支完全可以在本地自己藏着玩,是否推送,视你的心情而定!
抓取分支
多人协作时,大家都会往master
和dev
分支上推送各自的修改。git clone
当你的小伙伴从远程库clone时,默认情况下,你的小伙伴只能看到本地的master
分支。
推送分支:git pull
;如果推送失败,先用git pull
把最新的提交从origin/dev
抓下来,然后,在本地合并,解决冲突,再推送:
因此,多人协作的工作模式通常是这样:
git push origin <branch-name>
推送自己的修改;git pull
试图合并;git push origin <branch-name>
推送就能成功!如果git pull
提示no tracking information
,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>
。
这就是多人协作的工作模式,一旦熟悉了,就非常简单。
总结
git remote -v
;git push origin branch-name
,如果推送失败,先用git pull
抓取远程的新提交;git checkout -b branch-name origin/branch-name
,本地和远程分支的名称最好一致;git branch --set-upstream branch-name origin/branch-name
;git pull
,如果有冲突,要先处理冲突。发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。
在Git中打标签非常简单,首先,切换到需要打标签的分支上;然后,敲命令git tag <name>
就可以打一个新标签:$ git tag v1.0
;可以用命令git tag
查看所有标签。
比方说要对add merge
这次提交打标签,它对应的commit id是f52c633
,敲入命令:$ git tag v0.9 f52c633
注意,标签不是按时间顺序列出,而是按字母排序的。可以用git show <tagname>
查看标签信息
还可以创建带有说明的标签,用-a
指定标签名,-m
指定说明文字:$ git tag -a v0.1 -m "version 0.1 released" 1094adb
总结:
git tag <tagname>
用于新建一个标签,默认为HEAD
,也可以指定一个commit id;git tag -a <tagname> -m "blablabla..."
可以指定标签信息;git tag
可以查看所有标签。如果标签打错了,也可以删除:$ git tag -d v0.1
因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。
如果要推送某个标签到远程,使用命令git push origin <tagname>
;或者,一次性推送全部尚未推送到远程的本地标签:$ git push origin --tags
如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:$ git tag -d v0.9
,然后,从远程删除。删除命令也是push,但是格式如下:$ git push origin :refs/tags/v0.9
总结
git push origin <tagname>
可以推送一个本地标签;git push origin --tags
可以推送全部未推送过的本地标签;git tag -d <tagname>
可以删除一个本地标签;git push origin :refs/tags/<tagname>
可以删除一个远程标签。Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。