您的位置:首页 > 其它

Git使用教程

2016-03-13 17:07 381 查看
廖雪峰官方网站之Git教程:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

1.在github上新建一个项目仓库

2安装客户端msysigit
下载路径(官网):http://git-for-windows.github.io/
安装方法(百度经验):http://jingyan.baidu.com/article/e52e36154233ef40c70c5153.html
github 是服务端,要想在自己电脑上使用 git 还需要一个 git 客户端,这里选用 msysgit,这个只是提供了 git 的核心功能,而且是基于命令行的。如果想要图形界面的话只要在 msysgit 的基础上安装 TortoiseGit 即可
3.创建本地版本库文件夹
装完 msysgit 后右键鼠标会多出一些选项来,然后我们在本地新建个文件夹(比如叫 github),右键选择 Git Init Here,这样 github 文件夹内会多出来一个 .git 文件夹,(如果没有“Git Init Here”可以Git Bash,进入命令行后运行“git init”,同样可以生成.git文件)这就表示本地 git 创建成功。右键 Git Bash 进入 git 命令行就可以把刚刚新建的仓库克隆到本地,当然我们还需要配置下 ssh key。

4.配置git
首先,创建ssh key

ssh-keygen -t rsa -C "chinawjb@foxmail.com"


后面的 your_email@youremail.com 改为自己的邮箱,之后会要求确认路径和输入密码,这里使用默认的一路回车就行。成功的话会在 "C:\Users\Administrator\.ssh"(我自己的)下生成 .ssh 文件夹,打开 id_rsa.pub,复制里面的 key,回到 github,进入 settings,左边选择 SSH keys,Add SSH Key,title 随便填,粘贴 key。为了验证是否成功,在 git bash 下输入:

ssh -T git@github.com


如果是第一次的会提示是否 continue,输入 yes 就会看到:You've successfully authenticated, but GitHub does not provide shell access,这就表示已成功连上 github。

然后,要设置 username 和 email,因为 github 每次 commit 都会记录他们。

1 git config --global user.name "ChinaWJB"
2 git config --global user.email chinawjb@foxmail.com


5、上传和克隆
然后可以两种操作
(1)克隆到本地(比如克隆 css 的项目):

git clone git@github.com:zhuyujia/css.git


需要注意的是:github 提供了 3 种 url 路径(HTTPS,SSH,Subversion),一般如果账号处于登录状态,那么我们可以用 SSH,就像上面的代码,如果没有登录的话,只能用 HTTPS 的 url 了

(2)上传文件
选择要添加进仓库的文件:
git add .

【 一般如果你想分享这个文件夹里的所有代码,就在 add后面加“.”,上面的例子就是这样,如果传指定的,只需要把“.”改为文件名即可】

上面只是选择了要加入仓库的文件,下面添加进仓库

git commit -m 'Test'【后面的说明必须加,否则会出现高亮代码,无法继续操作】


【-m后面跟一个参数,表示说明,将代码提交到GitHub后,将会在代码文件信息上显示这个说明】
正式提交到github上
1 git remote add origin git@github.com:XXX/XXX.git
2 git push (-u) origin master

【如果远程库是空的,加“-u”, Git不但会把本地的
master
分支内容推送的远程新的
master
分支,还会把本地的
master
分支和远程的
master
分支关联起来,在以后的推送或者拉取时就可以简化命令。如果上传若失败,则 git pull (-u) origin master 将其拉回来,重新再提交】
之后如果本地提交了,直接使用“git push origin master“就可以提交到对应的远程库了

说明:

cd test

touch README

git commit -m 'first commit'

@github.com:lzjun/test.git

大概意思就是在本地创建test目录,初始化,创建一个README文件,当然这个文件时空的,你可以往里面填内容。接下来就是add就是把README文件纳入到git的管理范围内,

commit:相当于把你项目的代码,文件及所有的东西做一个快照,(好比我们拍照),这所有的文件定格在这个时刻,之后的每一次commit也只把那些发生了改变的文件做快照。此时还并没有把代码提交到GitHub上去

remote:和GitHub建立远程连接,注意这里的"lzjun"就是我的账户名,这根据自己的名称做相应的改变。这一步只在你第一次提交文件的时候出现,并且要输入之前的pressphrases.

push:就很好理解了,把文件推送到GitHub站点去。

6、帮助
git help 在命令窗口显示常用的命令
git help git 在浏览器打开git的api帮助文档

本地仓库或本地工作区
7、在本地提交,提交到本地版本库,更新后的提交也是用这两条命令
git add filename.txt(git rm filename同理)
git commit -m "描述"
删除文件rm同add

8、git status 查看当前文件是否被修改过
git diff filename.txt 查看当前文件哪些地方被修改过
git log 查看历史提交版本,版本号
git log --pretty=oneline     会有条理的输出历史提交版本

git reset --hard 【加上版本号的前几位就可以,会自动填充】该命令会返回到指定版本号的版本
git reset --hard HEAD^ 该命令是返回上一个版本
git reset --hard HEAD 该命令只是显示HEAD指针当前的分支的位置
git reflog 记录每一条命令,会显示执行每一条命令时当前的版本号
git checkout -- filename 在工作区修改后还没有add(或rm)到缓存区,可以丢弃工作区的修改
git reset HEAD filename 修改后已经提交到了暂存区,可以通过该命令返回到add之前的状态,
可以在用git checkout -- filename 丢弃工作区的修改
小结:
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令
git checkout -- file


场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令
git reset HEAD file
,就回到了场景1,第二步按场景1操作。

场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库

9.工作区:有.git 的文件夹
版本库:.git 文件夹
暂存区:.git 中的stage区
master分支



远程仓库:
小结:
要关联一个远程库,使用命令
git remote add origin git@server-name:path/repo-name.git

关联后,使用命令
git push -u origin master
第一次推送master分支的所有内容;
此后,每次本地提交后,只要有必要,就可以使用命令
git push origin master
推送最新修改;

分支:
本地新建分支+合并分支+删除分支

查看分支:
git branch


创建分支:
git branch <name>


切换分支:
git checkout <name>


创建+切换分支:
git checkout -b <name>(
"
-b"
参数表示创建并切换
)


合并某分支到当前分支:
git merge <name>


删除分支:
git branch -d <name>


1、查看分支:git branch
*master



2、新建+切换分支:git checkout -b dev
查看分支: git branch
*dev
master



3、在新分支上commit代码到本地仓库:



4、切换回master分支:git checkout master
+
5、合并分支:git merge dev



6、删除分支dev:
git branch -d dev




分支冲突
在两个分支分别更改了代码,在master和dev都add和commit之后,合并时出现冲突,此时查看文件会出现:
<<<<<<< HEADCreating a new branch is quick & simple.
=======Creating a new branch is quick AND simple.
>>>>>>> feature1

注意:此时,两个分支处于等待修改后自动合并的状态,只需把文件手动修改后,再add和commit之后两个分支就重新合并到一起了。

合并后通过命令:
git log --graph --pretty=oneline --abbrev-commit

或:git log --graph

可以查看到如下输出:
[align=left]* 3aeb259 delete confilict in master and dev[/align]
[align=left]|\[/align]
[align=left]| * d1f9b49 new a branch dev[/align]
[align=left]* | b6d227b in master new[/align]
[align=left]|/[/align]
[align=left]* 94e8f6b change testliaoxuefeng[/align]
[align=left]* f56ae93 add readme[/align]
[align=left]* f32d4bf wrire a test file[/align]
[align=left]* 736e83c wrire a testliaoxuefeng file[/align]

Bug分支

修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场
git stash
一下,然后去修复bug,修复后,再
git stash pop
,回到工作现场。
恢复现场:两种方法
一是:用
git stash apply
恢复,但是恢复后,stash内容并不删除,你需要用
git stash drop
来删除;
另一种是:用
git stash pop
,恢复的同时把stash内容也删了:
可以用git stash list 来查看刚才的工作现场去哪了。

Feature分支
添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。
但是在合并的时候,不需要这个新功能了,则,需要强制删除该分支
git branch -D <name>,普通删除删除不了,因为没有合并。

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


多人协作

多人协作的工作模式通常是这样:

首先,可以试图用
git push origin branch-name
推送自己的修改;

如果推送失败,则因为远程分支比你的本地更新,需要先用
git pull
试图合并;

如果合并有冲突,则解决冲突,并在本地提交;

没有冲突或者解决掉冲突后,再用
git push origin branch-name
推送就能成功!

如果
git pull
提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令
git branch --set-upstream 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
,如果有冲突,要先处理冲突。

标签管理
创建标签:

命令
git tag <name>
用于新建一个标签,默认为
HEAD
,也可以指定一个commit id;

git tag -a <tagname> -m "blablabla..."
可以指定标签信息;

git tag -s <tagname> -m "blablabla..."
可以用PGP签名标签;

命令
git tag
可以查看所有标签

使用标签:

命令
git push origin <tagname>
可以推送一个本地标签;

命令
git push origin --tags
可以推送全部未推送过的本地标签;

命令
git tag -d <tagname>
可以删除一个本地标签;

命令
git push origin :refs/tags/<tagname>
可以删除一个远程标签。

使用GitHub之fork

在GitHub上,可以任意Fork开源仓库;

自己拥有Fork后的仓库的读写权限;

可以推送pull request给官方仓库来贡献代码。

————————参考廖雪峰老师官网
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: