git学习
1.创建一个空目录:
$ mkdir learngit $ cd learngit $ pwd /Users/michael/learngit
pwd
命令用于显示当前目录
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.大功告成