平时经常使用github,clone别人的项目或者自己写项目上传到github都或多或少用到git,但是一段时间不用了又忘了命令,总要浪费些时间查资料,不胜其烦,好记性不如烂笔头,今天我想自己总结一下,加深记忆,方便快速查阅,下面不啰嗦直接上代码:
创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有
id_rsa
和id_rsa.pub
这两个文件,如果已经有了,不需要创建了。如果没有,执行此命令,创建SSH Key。1
$ ssh-keygen -t rsa -C "youremail@example.com"
git初始化,让当前目录处理git管理之下
1
$ git init
添加文件。file可以是具体文件名,也可以是文件夹,甚至可以是
.
(表示add当前所有文件),post/*
(表示post目录下的所有文件),post/*.js
(表示post目录下的所有js文件)1
$ git add <file>
查看当前状态,一般系统会提示下一步的操作。比如是否需要commit , push 等操作
1
$ git status
提交文件到版本库,可以输入提交信息
1
$ git commit -m "message"
打印命令可以查看历史记录,
git log
命令查看的更详细,git log --pretty=oneline
命令更直观1
2
3
4$ git log
$ git log --pretty=oneline
$ git log --pretty=oneline --abbrev-commit
$ git log --graph有时候需要回到上一个版本或者指定版本需要用到这个命令。
HEAD
表示当前版本,HEAD^
表示上一个版本,上上个版本就是HEAD^^
,当前版本往上100个版本就是HEAD~100
。当前这里也可以使用提交的id,eg.3628164...882e1e0
,一般取前6位就可以了1
$ git reset --hard HEAD^
有时候版本切回之前的版本了,但是又想恢复到现在的版本,那如何知道现在的版本号呢?别着急,
git reflog
帮你排除忧虑,这个命令记录了你之前所有版本记录1
$ git reflog
可以丢弃(discard)工作区的修改,或者已经使用过
git add
命令后又修改了工作区的内容但是想丢弃,回到git add
时的状态。
即回到上一次git add
或者git commit
的状态。如果你git add
了一些资料,但是还没有git commmit
,这时你想丢弃暂存区的内容,可以使用命令git reset HEAD <file>
把内容打回到工作区,再使用命令git checkout -- <file>
把工作区的内容丢弃。如果你已经使用了git commit
提交了内容,但是又反悔了,可以使用git reset --hard HEAD^
返回上一个版本1
$ git checkout -- <file>
删除文件。如果删除了文件,又反悔了,因为此时没有存储到暂存区,所以可以使用
git checkout -- <file>
恢复。1
$ rm <file>
删除文件。注意和
rm <file>
的区别,git rm <file>
相当于rm <file>
+git add <file>
。因此若想恢复之前的状态,需要先执行git reset HEAD <file>
打回到工作区,再执行git checkout -- <file>
。1
$ git rm <file>
这条命令是把本地库和github上的远程库建立关联。这个是采用ssh的方式,所以github上的ssh配置里面需要有你本地的ssh公钥。后面的
chenweiyi/gitTest
是你的github账号名和项目名。1
$ git remote add origin git@github.com:chenweiyi/gitTest.git
当你首次提交文件到github时,需要输入这条命令。
push
推,表示推送到github;origin
远程仓库名;master
分支名;-u
表示把本地master和远程仓库的master分支关联起来,以后再推送或者拉取时可以简化命令git push origin master
/git pull
1
$ git push -u origin master
从远程仓库中克隆项目到本地。当你执行这条命令时,git自动把本地
master
分支和远程库的master
分支对应起来,远程库默认仓库名时origin
1
$ git clone git@github.com:chenweiyi/gitTest.git
查看当前项目分支
1
$ git branch
创建名为name的分支
1
$ git branch <name>
切换到名为name的分支
1
$ git checkout <name>
创建并切换到名为name的分支
1
$ git checkout -b <name>
合并名为name的分支到当前分支
1
$ git merge <name>
删除名为name的分支
1
$ git branch -d <name>
查看远程库的信息,
$ git remote -v
查看更详细的信息1
$ git remote
推送名为branchName分支到远程库
1
$ git push origin <branchName>
拉去远程分支到本地。当你从远程库克隆时,默认情况下只能看到本地master分支。可以用
git branch
命令查看下。现在要看到其他分支就必须使用这个命令创建。比如git checkout -b dev origin/dev
就能把远程dev
分支创建到本地1
$ git checkout -b <branchName> origin/<branchName>
与远程库创建连接后,即可使用此命令拉取远程库分支内容到本地。如果拉取失败,则可根据提示使用
git branch --set-upstream <branchName> origin/<branchName>
来指定本地分支branchName
与远程分支的连接。1
$ git pull
首先切换到需要打标签的分支,再打标签。默认标签是打在最新提交的commit上的。有时候,如果忘了打标签,比如,现在已经是周五了,但应该在周一打的标签没有打,怎么办?方法是找到历史提交的commit id,然后打上就可以了。eg.
$ git tag v0.9 6224937
1
2$ git checkout <branchName>
$ git tag <tagName>查看所有的标签。注意,标签不是按时间顺序列出,而是按字母排序的。可以使用
git show <tagName>
查看标签信息。1
$ git tag
可以创建带有说明的标签,
-a
指定标签名 ,-m
指定标签信息 ,commitId
版本id1
$ git tag -a <tagName> -m <message> [commitID]
标签打错了可以删除标签
1
git tag -d <tagName>
创建的标签都只存储在本地,不会自动推送到远程 ,使用此命令推送到远程。或者一次性推送本地尚未推送到远程的所有标签,命令:
git push origin --tags
1
git push origin <tagName>
如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:
git tag -d v1.0
。然后再使用该命令:git push origin :refs/tags/v1.0
1
git push origin :refs/tags/<tagName>
保存代码现场
1
git stash
查看所有的stash
1
git stash list
恢复指定的stash
1
2
3git stash apply stash@{x}
或者恢复最近的stash
git stash pop删除stash
1
git stash drop
有时候合并分支会出现界面被锁住的情况,这时处理方法: 先按
ESC
,再输入:wq
,按一下Enter
键即可退出出现
warning: LF will be replaced by CRLF in ...
提示时,设置git config --global core.autocrlf false
或者git config --global core.safecrlf false
消除提示有时
.gitignore
配置文件不生效,原因是某些文件已经被纳入了版本管理中,做法是删除本地缓存文件git rm -r --cached
,然后重新添加文件到仓库中git add xxx
和git commit -m 'xxx'
本地创建的项目,需要推送到github或者码云上去,首先,你要在github或者码云上创建一个项目,例如名称为
projectX
,然后使用git init
初始化本地工程,再次使用(以码云为例)git remote add origin git@gitee.com:cwy7/projectX.git
,然后拉去远程项目使用git pull --rebase origin master
,然后检查下状态git status
以继续下一步操作查看某一个命令的使用说明
1
git <command> --help