前提:
SVN属于集中式管理:需要依赖网络以及“中央管理库”
Git属于分布式管理:不需要网络,任何人本地都是一个完整的代码库。
注意事项:
1、不管是删除还是添加,都要先将改变的代码add,然后在commit
2、发起pull request的时候, 是将你fork的项目clone到本地, 然后进行修改,修改完了再提交代码到你的工作区,因为别人的你也提交不上去 O(∩_∩)O哈哈~ 。然后在你fork的项目中发起pull request。
常用命令:
pwd: 查看目录地址
ls:显示所有子文件夹
cd:切换文件夹进入; cd.. 后退 cd~ 直接退到根目录
cat <file> 查看文件内容
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 <file> 如果有多个文件,可以多次添加 ,也可以添加一个文件夹的,添加文件夹一定要是完整路径,注意后面那个路径"/"符号。只需写出前几个字母,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 <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
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 pull origin master 命令之后,报错:
* branch master -> FETCH_HEAD
fatal: refusing to merge unrelated histories
这是因为:预设行为不允许合并没有共同祖先的分支,需要加上--allow-unrelated-histories
选项,再进行pull操作才不会出现此类错误信息:
git pull origin master --allow-unrelated-histories
最基本的使用应该这些就可以了,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'
网友评论