1.创建版本库
(1)$ mkdir learngit (生成learngit文件夹)
$ cd learngit (切到learngit)
$ pwd (显示当前目录)
(2)$ git init (把这个目录变成可以托管的仓库)
2. 把文件放到版本库
几次add 一次comit add是放入暂存区 commit才是真正保存
$ git add reademe.txt
$ git add licsence.txt
$ git commit –m “”;
3. 删除文件
$ rm test.txt
误删后恢复文件
$ git checkout -- test.txt
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file
,就回到了场景1,第二步按场景1操作。
4 历史修改记录
$ git log
$ git log --pretty=oneline(每条修改记录在一行显示)
$ git re
set --hard HEAD^(返回上一版本)
$ git re
set --hard HEAD^^(返回上上个版本)
$ git re
set --hard 3628164(返回对应版本号,版本号不用写全,写前几位就行)
$
gitreflog(关了窗口后再想查看修改记录输入的命令)
5远程仓库
(1)创建SSH Key 在gitbash中输入$ssh-keygen -t rsa -
Cyouremail@example.com(把邮件地址换成你自己的邮件地址)
然后一路回车,使用默认值即可。
C:UsersAdministrator 此目录下有.ssh 的文件夹了。
登录github右上角 setting -
Account settings-SSH Keys-new ssh keys-title(随便填)-Key(粘贴id_rsa.pub
文件的内容)-Add Key
6新建仓库并推送
(1) 右上角Create a new repo-Create a new repo填入名字其他保持默认设置,点击“Create repository”按钮
Gitbasah 输入以下命令$git remote add origin git@github.com:michaelliao/learngit.git
把上面的michaelliao
替换成你自己的GitHub账户名
(2)$ git push -u origin master
(3)输入github用户名 密码回车就搞定了。
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master
推送最新修改;
7先创建远程库,再克隆本地库。
(1)创建完远程库后 在gitbash输入
$git clone https://github.com/ytudt/gitskills.git(url地址+库名)
(2)$ cd gitskills
$ ls
README.md (查看仓库中的内容)
8
创建分支
(1)
$git checkout -b dev
表示创建并切换,相当于以下两条命令
$ git branch dev
$ git checkout dev(切换到dev)
(2)
$git branch 查看所有分支 *表示在当前分支下
(3)修改完成文件后在 dev分支下提交
$ git add readme.txt
$ git commit -m
"branch test"
(4)$ git checkout master(切换回主分支)
(5)
$git merge dev(把dev分支合并到当前分支,dev分支还存在)
(6)
$git branch -d dev(删除dev分支)
注意:两个分支都有修改的情况下不能合并。合并是会有冲突。
9在dev分支工作时突然遇到master有不过需要修改
(1)$ git status(把当前工作现场“储藏”起来)
(2) $git checkout master
(切换到master)
(3) $ git checkout -b issue-
101(建立新分支)
(4)修改bug
(5) $ git add readme.txt
$ git commit -m
"fix bug 101"(保存修改)
(6) $ git checkout master(切换到master)
(7) $git merge --no-ff -m
"merged bug fix 101"issue-
101(合并分支)
(8) $ git checkout dev(切换到dev)
(10) $git stash pop
(恢复原来工作状态并删除stash)
或者git stash apply(先恢复)
git stash drop(后删除stash)
10
删除还没合并到
master
的分支
如果新建了分支还没有合并到master不能通过
$git branch -d feature-vulcan删除 可以通过
$git branch -
Dfeature-vulcan
删除。
11 往远程库推送分支
$ git push origin master(dev)
12
创建标签
(1)
$git tag v1.
0 默认标签是打在最新提交的commit上的
(2)给以前的打标签
$ git log --pretty=oneline --abbrev-commit
$git tag v
0.
96224937 (给某个id的版本打标签)
(3)$ git tag(产看所有标签)
(4)$ git
show v0.9产看标签的详细内容
13
删除标签
如果没有添加到远程库中
(1)
$git tag -d v
0.
1 删除标签
(2)$ git push origin v1.
0 推送某个标签到远程库
(3)$ git push origin –tags
一次性推送全部尚未推送到远程的本地标签:
如果推动到远程库了
$git tag -d v
0.
9 先从本地删除
$git push origin
:refs/tags/v0.
9 然后从远程库删除
14 git hook
在执行git各种命令时会触发一些钩子函数,可以执行某些脚本
在项目根目录下cd .git/hooks 就可以看到各种钩子(只有把.sample后缀去掉才可以执行)
比如在git pull 代码合并后触发post-merge
hooks新建 post-merge 文件 输入如下修改完后需要在命令台中执行`chmod +x post-merge`
功能是检查 package.json 如果变更了则执行 npm install
#!/usr/bin/env bash # MIT © Sindre Sorhus - sindresorhus.co # git hook to run a command after `git pull` if a specified file was changed # Run `chmod +x post-merge` to make it executable then put it into `.git/hooks/`. changed_files="$(git diff-tree -r --name-only --no-commit-id ORIG_HEAD HEAD)" check_run() { echo "$changed_files" | grep --quiet "$1" && eval "$2" } # Example usage # In this example it's used to run `npm install` if package.json changed check_run package.json "npm install"