Git的常用命令
Git 配置信息
- 身份信息
(- -global是全局参数,意味着本机中的所有仓库都共同使用。如果不加则只适用于本仓库。)
$ git config --global user.name "用户名"
$ git config --global user.mail "邮箱"
- 忽略特殊文件
在git工作区的根目录下创建.gitignore文件,将要忽略的文件填进去。
(windows下新建txt文件,另存为.gitignore即可得到.gitignore文件,并且要将.gitignore文件add,commit之后才可忽略所需文件。)
/bin/ 忽略整个bin目录
*.txt 忽略全部txt文件
......
- 配置别名
$ git config --global alias.ad add
$ git config --global alias.cit commit
创建仓库
-
创建一个新的本地仓库:
$ git init
-
克隆一个远程仓库
$ git clone ssh://user@domain.com/repo.git
$ git clone http://user@domain.com/repo.git
- 远程库(以GitHub为例,创建完即可关联远程库)
1.创建ssh-key(ssh-key存储在用户主目录下单.ssh文件中。id_rsa文件存储私钥,id_rsa.pub存储公钥):$ ssh-keygen -t rsa -C "youremail@example.com"
2.登陆GitHub,打开“Account settings”,“SSH Keys”页面,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容。
本地修改
-
查看本地工作目录的状态:
$ git status
-
查看修改内容:
$ git diff
-
在下次提交前将修改文件到添加到stage状态:
$ git add <file>
-
在下次提交前将全部修改文件添加到stage状态:
$ git add .
-
提交stage状态中先前保存的文件:
$ git commit -m "描述信息"
-
提交stage状态中的全部保存文件:
$ git commit -a
-
删除文件
1.直接资源管理器删除等价于$ rm <file>
2.如果确实需要删除,再执行:$ git rm <file>
,再执行:$ git commit -m "delete <file>"
3.如果误删且还未提交可执行:$ git checkout -- <file>
回退到被删之前的状态。
4.如果误删且已提交则可执行:$ git reset --hard head^
,另版本回到上一版本从而得到误删文件。
提交历史
-
显示所有提交历史,从新到旧:
$ git log
-
显示所有命令历史:
$ git reflog
-
显示单个文件的历史记录:
$ git log -p <file>
-
显示谁在什么时间修改了文件中的什么内容:
$ git blame <file>
分支
-
显示所有分支,包括远程分支:
$ git branch -av
-
显示本地分支:
$ git branch
-
新建分支:
$ git branch <new-branch>
-
新建一个分支并跳转到新分支:
$ git branch -b <new-branch>
-
跳转到另一分支:
$ git checkout <branch>
-
根据远程分支创建一个新的对应本地分支:
$ git checkout -b <branch> <remote/branch>
-
删除分支:
$ git branch -D <branch>
-
合并分支到当前分支:
$ git merge <branch>
-
合并分支到当前分支并添加记录:
$ git merge --no--ff -m "commit" <branch>
-
将分叉的提交变为直线:
$ git rebase <branch>
-
存储分支状态:
$ git stash
-
查看储存分支:
$ git stash list
-
恢复分支并删除stash内容:
$ git stash pop
-
恢复分支且不删除stash内容:
$ git stash apply
标签
- 为当前最新提交建立一个标签(默认为head,也可指定commit id前7位)
轻量标签:
一个特定提交的引用
$ git tag <tag-name> (例:v1.0)
附注标签:(建议使用)
存储在 Git 数据库中的一个完整对象。 它们是可以被校验的。其中包含打标签者的名字、电子邮件地址、日期时间;还有一个标签信息。并且可以使用 GNU Privacy Guard (GPG)签名与验证。
(-a指定标签名,-m指定说明文字)
$ git tag -a <tag-name> -m "标签详细说明" (例:-a v1.0 -m "正式版第一版")
- 显示所有标签:
$ git tag
- 显示标签说明文字:
git show <tag_name>
- 推送一个标签:
$ git push origin <tag_name>
- 推送所有未推送标签:
$ git push --tags
- 删除本地标签:
$ git tag -d <tag_name>
- 删除远程标签:
$ git push origin :refs/tags/<tag_name>
更新与推送
- 获取远程库当前配置信息:
$ git remote -v
- 显示远程库信息(github的远程库名默认为origin):
$ git remote show <remote>
- 关联远程库:
$ git remote add <shortname><url>(例:$ git remote add origin git@server-name:path/repo-name.git)
- 下载远程库某分支的所有更新并且直接合并到当前head中:
$ git pull <remote><branch>
- 第一次推送master分支的所有内容:
$ git push -u origin master
,以后再次推送时:$ git push origin master
- 推送本地某分支的所有更新到远程库中:
$ git push <remote> <branch>
- 删除远程库分支:
$ git branch -dr <remote/branch>
撤销
- 丢弃掉本工作目录下的所有更改(head表示当前版本):
$ git reset --hard head
- 丢弃工作区某文件的更改:
$ git checkout -- <file>
- 丢弃暂存区的修改:
$ git reset head <file>
- 回退到上一个版本(head^^上上个版本,head~10上十个版本):
$ git reset --hard head^
- 回退到指定版本:
$ git reset --hard <commit id>
Git的使用建议
-
多多使用commit,每一次的commit都应当与修改的内容相关。比如修改两个不同的bug,则每一个bug都应该有一个相关的commit。
-
不要commit还未完成的工作。
-
在commit之前需要完成代码的测试工作。
-
如何写一个好的commit呢?
1.这一次的修改动机是什么。
2.这次修改和之前有什么区别。 -
多使用分支来开发新功能或者修改bug。
-
查看帮助文档总是有没错的:
" $ git help
-
建立新仓库的步骤:
-
$ git init
//初始化仓库 -
$ git add .(文件name)
//添加文件到本地仓库 -
$ git commit -m "first commit"
//添加文件描述信息 -
$ git remote add <shortname><url>(例:$ git remote add origin git@server-name:path/repo-name.git)
//链接远程仓库,创建主分支 -
$ git pull <remote><branch>
// 把本地仓库的变化连接到远程仓库主分支 -
$ git push -u origin master
//把本地仓库的文件推送到远程仓库
参考
git-book
http://www.runoob.com/w3cnote/android-tutorial-git-repo-operate.html);
https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000