1.在github上新建一个项目仓库
2安装客户端msysigit
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
后面的 your_email@youremail.com 改为自己的邮箱,之后会要求确认路径和输入密码,这里使用默认的一路回车就行。成功的话会在 "C:UsersAdministrator.ssh"(我自己的)下生成 .ssh 文件夹,打开 id_rsa.pub,复制里面的 key,回到 github,进入 settings,左边选择 SSH keys,Add SSH Key,title 随便填,粘贴 key。为了验证是否成功,在 git bash 下输入:
如果是第一次的会提示是否 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
可以查看到如下输出:
* 3aeb259 delete confilict in master and dev
|
| * d1f9b49 new a branch dev
* | b6d227b in master new
|/
* 94e8f6b change testliaoxuefeng
* f56ae93 add readme
* f32d4bf wrire a test file
* 736e83c wrire a testliaoxuefeng file
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
————————参考廖雪峰老师官网