1.创建一个空目录:
$ mkdir learngit $ cd learngit $ pwd /Users/michael/learngitpwd命令用于显示当前目录
2.git init命令把这个目录变成Git可以管理的仓库
3.git add把文件添加到仓库,放在暂存区
4.git status命令可以让我们时刻掌握仓库当前的状态
5.git diff是查看与上一版本difference
6.git commit提交文件
!!正确的流程是:第一次修改 -> git add -> 第二次修改 -> git add -> git commit
7. git log查看历史提交记录
git log -1 显示最近一次的提交
可加上 --pretty=oneline参数使记录显示得更简洁
git log --pretty=oneline --abbrev-commit 查看每次提交的commit id
8.git reset --hard HEAD^ 用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
git reset HEAD file可以把暂存区的修改撤销掉,退回到工作区
9.cat<file>可以查看文件内容
10.git reflog用来记录你的每一次命令
11.命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
12.rm <file>删除工作区的某文件或者直接系统操作删除
然后如果确实是要删除该文件,那就用命令git rm删掉,并且git commit,这样就从版本库中删除了
如果删错了,可以用git checkout -- <file>从版本库中恢复到工作区(仅限上一次操作??),会丢失最近一次提交后你修改的内容。
13.要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git,(如果报错,先输入$ git remote rm origin)
把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令
命令git clone把远程克隆到本地库
14.$git checkout -b dev 创建dev分支,然后切换到dev分支
相当于$ git branch dev //创建分支
$ git checkout dev //切换到分支
这两条指令合并
$git branch -d dev 删除dev分支
15.git branch 列出所有分支,当前分支前面会标一个*号
16.git merge <name> 合并某分支到当前分支
17.git log --graph --pretty=oneline --abbrev-commit 查看分支的合并情况
18.git merge --no-ff -m "XXX" <分支的name> --no-ff参数,表示禁用Fast forward,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息,删除分支后,不会丢掉分支信息
19.git stash 把当前工作现场“储藏”起来,可以去处理其他分支工作,等以后恢复现场后继续工作
git stash list 查看保存的“工作现场”,有0,1,2等排序
git stash apply 恢复“第0个”工作现场,但是恢复后,stash内容并不删除,需要再用stash@{0}git stash drop来删除stash;
或者用git stash pop,恢复工作现场的同时把stash内容也删了。
20.如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除
21.git remote -v 查看远程库详细的信息
22.克隆别人的远程库时,只有master,如果要在他的dev分支工作,用指令git checkout -b dev origin/dev
23.用git push origin branch-name提交,
如果你的提交和别人的提交有冲突,用git pull试图合并,如果不行,
就先用git branch --set-upstream dev origin/dev 指令来设置dev和origin/dev的链接,
然后用指令 git pull把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突,再推送。
24.git tag <标签name>可以为当前分支打标签
git tag查看所有标签
git tag <标签name> <commit id> 为某次提交打标签
git tag -a <标签name> -m"说明文字" <commit id> 这样能完整地打出关键的信息
git show <tagname>查看标签信息
25.git tag -d <tagname> 删除标签
git push origin <tagname> 标签推送到远程
git push origin --tags 全部标签推送到远程
删除远程标签:先删除本地的,然后用指令git push origin :refs/tags/<tagname> 删除远程的。
26.Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件
内容举例如下:
# Windows: Thumbs.db ehthumbs.db Desktop.ini # Python: *.py[cod] *.so *.egg *.egg-info dist build # My configurations: db.ini deploy_key_rsa
27.$ git config --global alias.st status 定义st=status,简化GIT代码
$ git config --global alias.unstage 'reset HEAD' 定义unstage=reset HEAD
加上--global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用
28.听说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"有奇效
29.大功告成