git作为作为一个免费开源的代码库管理工具,它无疑受众广大,且功能也非常强大!我这边分享一些个人平常用的比较频繁的命令。
在最开始,我们先将本机的ssh Key和你的github账号关联在一起。这样你才有权限对你账号下的远程仓库R/W。
-
打开你的git bash,输入 cd ~/.ssh
-
输入cat id_rsa.pub ;那串以ssh-rsa开头的字符串就是你的ssh Key。
-
登录github,点击头像->Settings->SSH and GPG keys->New SSH key,将前面的那串字符串复制粘贴进去,再给他起个名字就行了。
我们先按照一个项目的流程来讲吧。
-
首先,先为项目建一个独立的文件夹。
-
开启git bash,利用它来完成shell命令。
-
先将该文件夹初始化为git管理项目。使用命令:git init。
-
接下来登录我们的github。在github创建一个新的仓库,复制下它的ssh地址,格式大概是git@github.com:xiaoliu/test.git这种格式。如果是已有项目(该项目仓库里已有文件)直接记下它的ssh地址就行了,但得先确保你有对这个项目的R/W权限,即你必须是这个项目的创建者,或者合作者(collaborators)。例如图:James用户拥有本项目的R/W权限。
-
回到我们的本地项目。先将该本地项目关联github上的远程仓库,也就是上一步我们创建的那个。使用命令:git remote add origin(这个是你给远程库起的一个别名) 远程仓库地址(刚刚记下的那个ssh地址)。
-
项目关联好了以后,如果远程库里本来就有文件和分支,我们先拉取master分支的内容。使用命令:git pull origin(这个就是刚刚的别名) master --allow-unrelated-histories。
-
接下来我们将本地的master分支与远程库的master分支关联在一起。使用命令:git branch --set-upstream-to=origin(刚刚的别名)/master master。如果远程库还存在着其他分支,我们可以在本地创建一样的分支,再与远程库的关联。
-
接下来我们就可以开始提交代码到github了。先使用命令:git add 你要提交的有变化的文件 ; 然后:git commit -m “对本次提交的声明,就是你本次提交的变化是什么” ; 最后:git push ; 这样就将你的代码push到远程库。但是它push的只是当前分支。push其他分支:git push 分支名。
以上就是一个比较简单的git项目流程了。接下来说一些其他的命令。
-
前面提到过的分支。创建dev分支,然后切换到dev分支:git checkout -b dev(-b参数表示创建并切换,相当于git branch dev+git checkout dev)。用git branch命令查看当前分支,会列出所有分支,当前分支前面会标一个*号。切换分支:git checkout master。
1.1)合并分支:git merge命令用于合并指定分支到当前分支。例git merge dev会把dev分支提交的工作合并到当前分支(master)。
1.2)删除分支:git branch -d dev(-D可强制删除未合并的分支,分支上的修改将丢失)
1.3)冲突:(两个分支对同一内容的不同修改)
·当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。 ·解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。 ·用git log --graph命令可以看到分支合并图。
-
获得当前项目状态:git status。
-
查看文件具体变化情况:git diff filename.txt
用git diff HEAD – filename.txt命令可以查看工作区和版本库里面最新版本的区别
注:git diff 是只比较比较工作区和暂存区(最后一次add)的区别,git diff --cached 是只比较暂存区和版本库的区别,git diff HEAD – filename 是只比较工作区和版本库(最后一次commit)的区别。
-
查看提交历史,以便确定要回退到哪个版本:git log
查看命令历史,以便确定要回到未来的哪个版本:git reflog
-
回退到前1个版本(修改前):git reset --hard HEAD~1 或者 git reset --hard HEAD^
回退到前n个版本:git reset --hard HEAD~n
通过版本号回退或前进:git reset --hard 890bb5(undo,redo)
git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。
例:git reset HEAD filename.txt将已保存暂存区的修改回退到工作区(修改还在,只是回到工作区了)
-
命令git checkout – readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。
git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。
-
删除文件:git rm test.txt,如果删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:git checkout – test.txt
总结:1.如果你用的rm删除文件,那就相当于只删除了工作区的文件,如果想要恢复,直接用git checkout – 就可以 2.如果你用的是git rm删除文件,那就相当于不仅删除了文件,而且还添加到了暂存区,需要先git reset HEAD ,然后再git checkout – 3.如果你想彻底把版本库的删除掉,先git rm,再git commit 就ok了
-
git stash:将当前做到一半工作存储起来(当前分支,未提交),去做其他事,例如去修bug
git stash list:查看所有存储起来的没做完的工作
git stash apply恢复做到中途的工作,但是恢复后,stash内容并不删除,你需要用git stash drop来删
git stash pop,恢复的同时把stash内容也删
git stash apply stash@{0}:恢复指定stash -
标签:tag就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起。类似于IP与域名
打标签:git tag v1.0 默认标签是打在最新提交的commit上$ git tag v0.9 f52c633:为commit ID 为f52c633打标签
还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字:
$ git tag -a v0.1 -m "version 0.1 released" 1094adb
git tag查看所有标签
git show 查看指定标签的信息
git tag -d v0.1:删除标签
推送某个标签到远程,使用命令git push origin
一次性推送全部尚未推送到远程的本地标签:
$ git push origin --tags
-
最后说一个与你本机的ssh Key和github账号的问题。查看本机ssh关联了哪个账号可以用命令:ssh -T git@github.com。这样在终端就会显示出该ssh key所关联的账号。一个ssh key只能关联一个github账号,一旦你想切换关联账号,就必须先把原来的关联账号里的ssh key删掉,才可以在另一个账号里关联该ssh key。其实不必关联来关联去的,无非就是要获得一个项目的R/W权限,可以直接让项目的拥有者将你的账号加入collaborators,这样你就拥有该项目的R/W权限了。添加方法:在github点入该项目->Settings->Collaborators->搜索要加入的账户名->add collaborator。