01 | Git常用命令介绍
在Windows上安装Git
Windows-Git Bash: 下载地址
Git GUI工具:Fork
Windows-Fork: 下载地址
Git 基础
配置全局信息
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
初始化仓库
$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/
管理修改
创建readme.txt并将文件添加至暂存区(Stage)
$ git add readme.txt
提交修改
$ git commit -m "wrote a readme file"
git commit命令,-m后面输入的是本次提交的说明,最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
当然也可以一次add多个文件至暂存区
$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."
回退版本
修改readme.txt文件中内容,查看
$ git status
$ git diff readme.txt
$ git log
$ git log --pretty=oneline
回退到上一版本
$ git reset --hard HEAD^
$ git reset --hard <commit id>
$ git reflog
(这里上一个版本就是HEAD,上上一个版本就是HEAD,当然往上100个版本写100个比较容易数不过来,所以写成HEAD~100。)
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后执行git commit就可以一次性把暂存区的所有修改提交到当前分支。
撤销修改
$ git checkout -- <filename>
撤销工作区修改,命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令。
$ git reset HEAD <filename>
git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD
远程仓库
将本地仓库的内容推送到GitHub仓库。
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
$ git remote add origin git@github.com:michaelliao/learngit.git
$ git push -u origin master
从远程库克隆
$ git clone http://10.135.0.142/bjtu-it-center/gitlearn.git
分支管理
查看当前分支
$ git branch <name>
创建并然后切换
$ git checkout -b <name>
$ git switch -c <name>
切换分支
$ git checkout <name>
$ git switch <name>
删除分支
$ git branch -d <name>
分支合并
合并分支(merge后提示的Fast-forward表示这次合并是“快进模式”,也就是直接把master指向branch的当前提交,所以合并速度非常快。)
$ git merge <name>
解决冲突(解决后commit)
<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> feature1
查看分支合并情况
$ git log --graph --pretty=oneline --abbrev-commit
$ git log --graph
--no-ff参数,表示禁用Fast forward。通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
$ git merge --no-ff -m "merge with no-ff" <branch-name>
分支管理策略
查看远程分支
git remote
显示更详细的信息
$ git remote -v
推送分支
$ git push origin master
远程创建分支
$ git checkout -b feature origin/feature
拉取分支
$ git pull
如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令
$ git branch --set-upstream-to <branch-name> origin/<branch-name>
Rebase
rebase操作可以把本地未push的分叉提交历史整理成直线;
rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。
$ git rebase
忽略特殊文件
有些时候,你必须把某些文件放到Git工作目录中,但又不能提交它们,比如保存了数据库密码的配置文件啦,等等,每次git status都会显示Untracked files
...
.gitignore
文件样例:
# Windows:
Thumbs.db
ehthumbs.db
Desktop.ini
# Python:
*.py[cod]
*.so
*.egg
*.egg-info
dist
build
# My configurations:
db.ini
deploy_key_rsa
生成公钥
生成ssh key(在Windows下查看[c盘->用户->自己的用户名->.ssh]下是否有"id_rsa、id_rsa.pub"文件,若无则Git-Bash中执行以下命令)
ssh-keygen -t rsa -C "youremail@example.com"