####前提: SVN属于集中式管理:需要依赖网络以及“中央管理库” Git属于分布式管理:不需要网络,任何人本地都是一个完整的代码库。
###注意事项:
1、不管是删除还是添加,都要先将改变的代码add,然后在commit
2、发起pull request的时候, 是将你fork的项目clone到本地, 然后进行修改,修改完了再提交代码到你的工作区,因为别人的你也提交不上去 O(∩_∩)O哈哈~ 。然后在你fork的项目中发起pull request。
###常用命令:
pwd: 查看目录地址 ls:显示所有子文件夹 cd:切换文件夹进入; cd.. 后退 cd~ 直接退到根目录 cat 查看文件内容 open file 打开文件 终端命令: Ctrl + A 将光标跳到行头 Ctrl + E 将光标跳到行尾 Ctrl + L 清屏 Ctrl + R 搜索以前执行过的命令 Ctrl + C 终止正在运行的程序 Ctrl + D 退出 Terminal(这里建议使用 Command + W 来完成)
####Git的使用,本地仓库 大体流程
1.创建一个Git仓库 : git init
2.在创建的目录下,随便添加文件。然后git add 如果有多个文件,可以多次添加 ,也可以添加一个文件夹的,添加文件夹一定要是完整路径,注意后面那个路径"/"符号。只需写出前几个字母,tab按键会自动补全,git提示信息那里也有完整的要添加的文件。 git add . // 注意 . 是增加所有的*
3.将你添加的文件提交到仓库。 git commit (有一个问题:每次git commit之后,都要弹出确认提交的文件,要手动选择,删除前面的#号。假如新加的文件很多,一个个删除#号好麻烦啊,有没有别的方法?还是我操作的是错误的? 求指导)————有的时候会弹出,有时候又不用弹出,不知道什么原因。
git commit -m "这次提交的备注" 强烈建议每次commit都要写上备注,方便后续查看。 git commit 的时候不需要指出对应的文件。
4.git status 查看当前的状态。 可以看到内容的变化,需要提交修改的内容。 5.git diff 可以比较前后两次修改之间的变化。
6.查看版本提交信息 git log 可以查看提交的版本信息和顺序号 git log --pretty=oneline 查看信息简单明了。
7.版本回退 git reset --hard HEAD^ 后面这个^数量,代表返回前面第几次提交,太多了的时候,可以跟数字。git reset --hard HEAD^^^ , git reset --hard HEAD^66 不能确定要返回的位置是第几次提交位置,可以通过log查看对应提交的版本序号,用 git reset --hard 78er7387 返回到对应提交位置 。这个是版本号,没有必要写全,只写前几位就好,git会自动查找的。 版本回退后悔了,你可以使用git reflog查看命令历史,以便确定要回到未来的哪个版本。
撤销修改: 没有add之前,用git checkout --file。 一旦add到了暂存区,就要用git reset HEAD file , 然后再git checkout --file。
8.本地关联远程的仓库 git remote add origin <远程仓库地址> 关联之后,本地有修改就可以直接提交代码了。 git push origin master 第一次提交多添加一个参数,将本地与远程的分支关联 git push -u origin master
###远程仓库与本地仓库的关联
下载远程仓库到本地: git clone <远程仓库的url地址>
1.下载下来的代码一般只有一个分支,但是我们最好不要在这个分支上进行修改。 新建一个develop分支 git checkout -b develop 切换到develop分支 git branch develop 一步到位法:git branch -b develop 新建一个develop分支,并且切换到develop分支。 以后在修改、提交代码就是在develop分支上了。 开发完成后就可以合并到master分支上去了。
2.合并分支: 首先切换到要合并的分支,然后在合并 git checkout -b master git merge develop 合并develop分支内容到master分支。
3.删除分支:开发分支功能完了,代码也合并了,就可以删除了 git branch -d develop git branch -D develop 后面这个是强制删除分支 **注:**合并dev分支,请注意--no-ff参数,表示禁用Fast forward模式。 git merge --no-ff -m "merge with no-ff" develop 本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。 小结:查看分支:git branch 创建分支:git branch 切换分支:git checkout 创建+切换分支:git checkout -b 合并某分支到当前分支:git merge 删除分支:git branch -d
4.冲突解决: 场景:当你在develop分支改变了一个文件,然后切换到master分支又修改了同一个文件。合并代码的时候就会出现冲突。
git status 查看提示的冲突,在master分支上修改冲突内容,在commit即可。 然后删除develop分支。 小结:当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。 用git log --graph命令可以看到分支合并图。
5.暂存工作区
一个功能还没有开发完,代码不能提交,然后要紧急修改一个bug,这个时候就要把现在的代码暂存起来。 使用 git stash 命令,暂存现在的代码。 然后切回master分支,在新建一个fixbug分支。 git checkout -b master git branch -b fixbug 然后在这个fixbug分支,修改好bug,提交代码,在合并到master分支。git add .; git commit -m "fix a bug" ; git checkout master ; git merge fixbug . git branch -d fixbug.完成本次的bug修复。
然后你就又可以返回到develop分支继续你未完成的开发任务了。
git checkout develop
然后使用 git stash list
查看暂存区。
恢复之前的工作区有两个办法: 一是用
git stash apply
恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除; 另一种方式是用git stash pop
,恢复的同时把stash内容也删了;
你可以多次暂存内容,然后使用
git stash list
命令查看暂存的位置,使用git stash apply stash@{0}
回复你想继续工作的内容。 @{数字}这个数字就是你多次存储的序列数字
6.多人合作
你的小伙伴要在dev分支上开发,就必须创建远程origin的dev分支到本地,于是他用这个命令创建本地dev分支:
$ git checkout -b dev origin/dev
提交代码之前一般要先git pull ... 如果git pull也失败了,原因是没有指定本地dev分支与远程origin/dev分支的链接,根据提示,设置dev和origin/dev的链接:
git branch --set-upstream dev origin/dev
如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。
7.添加标签 git log 默认标签是打在最新提交的commit上的 git tag v0.9 6224937 也可以根据commitID打标签 还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字:
git tag -a v0.1 -m "version 0.1 released" 3628164
用命令git show <tagname>
可以看到说明文字:
8.操作标签
git tag -d tagName
//删除一个标签git push origin tagName
推送某一个标签到远程。一次性推送所有标签到远程git push origin --tags
如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:git tag -d v0.9
然后,从远程删除。删除命令也是push,但是格式如下:git push origin :refs/tags/v0.9
关联仓库问题: 如果在使用命令git remote add时报错:
git remote add origin url
fatal: remote origin already exists. 这说明本地库已经关联了一个名叫origin的远程库,此时,可以先用git remote -v查看远程库信息:git remote -v
origin git@github.com:michaelliao/learngit.git (fetch) origin git@github.com:michaelliao/learngit.git (push) 可以看到,本地库已经关联了origin的远程库,并且,该远程库指向GitHub。 我们可以删除已有的GitHub远程库:git remote rm origin
再关联码云的远程库(注意路径中需要填写正确的用户名):git remote add origin url
####最基本的使用应该这些就可以了,git很深,如果只是单纯的使用它管理代码,这些应该可以了。如果想深入研究的在去搜索其他命令吧。 ####感觉每一个小点都可以写一篇文章了,好多内容啊。
1.在本地目录下关联远程repository :
git remote add origin [url]
2.取消本地目录下关联的远程库:git remote remove origin
远程下载到本地:git clone url
3.查看版本信息:git log --pretty=oneline
用git log --graph
命令可以看到分支合并图。 4.撤销修改: git checkout -- flie --是必不可少的,否则就是切换操作了。。 已经add的文件,首先:git reset HEAD file ,然后再git checkout --file 5.从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交; 6.在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致; 7.建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name; 8.用git diff HEAD --file
命令可以查看工作区和版本库里面最新版本的区别 9.设置别名: git config --global alias.ci commit git config --global alias.st status 设置别名组合: git config --global alias.psm 'push origin master' git config --global alias.plm 'pull origin master'