git:在库文件夹下,创建当前文件夹问git库,git init;
添加文件到当前的git库中,git add MsgDemo;提交:git commit -m “init project file by git”,-m是msg,本次提交的消息内容,以便后期阅读;
git log (git reflog)查看提交日志,提交日志里边有commit id(3ef7945497233fcf2295d23f22c41c804a980a65),记录这个id用户回退到之前的版本或者跳到以后的版本:git reset –hard [commit id]; reset其实就是让git当前的版本节点指向所需的commit;
回退到上一个版本:git reset –hard HEAD^;
查看分支树形提交信息:git log –graph –pretty=oneline –abbrev-commit;
当前仓库的根文件夹属于工作区;
.git目录属于版本库,版本库中有自动分支master,还有暂存区,分支有一个指针head;
git status,查看当前库中文件的修改和提交状态,如果有以修改的必须提交到暂存区然后在提交到分支;git add 属于添加到暂存区,git commit –m属于推送到分支;没有添加到暂存区的文件不会提交到分支,所以git跟踪的是修改,不是文件;
将没有添加到暂存区的已经修改的文件回退到修改之前:git checkout – filename
git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区,这个撤回的标准是最后一次提交到分支的文件。如果将文件fileName已经放在了暂存区,那么可以用git reset HEAD finaName将文件退回到工作区,如果想撤回修改,那么用checkout将文件撤回。如果已经将文件commit到了分支,就不能再去reset到工作区了;
添加一个新文件:git add filename;git commit -m “msg”;
删除一个文件:git rm filename;不仅删除了工作区的文件,而且添加了暂存区的修改操作;如果想恢复,必须将节点中的文件操作退回到工作区,然后再将文件退回到操作区,git reset HEAD filename,git checkout – filename;
如果是rm fileName,那么直需要checkout;
远程仓库:
生成私钥公钥,ssh-keygen -t rsa -C youremail@example.com
其生成在Users/username/.ssh下
添加指定的远程项目:git remote add origin git@gitee.com:iashes/MsgDemo.git
删除指定的远程项目:git remote rm origin;
然后将本地库和远程库合并:
先从远程库拉下来,git pull –rebase origin master,然后合并:git push -u origin master
当远程库和本地库第一次进行合并之后,每次本地add,commit之后,运行git push origin master推送到远程就ok;
远程克隆仓库:git clone git@gitee.com:xxx/MsgDemo.git 或者https://
分支,master属于主分支,也称为自动分支;
创建分支:git branch newMas;
切换当前修改分支master为新创建的分支newMas:git checkout newMas;也就是将提交指针指向newMas分支;
(同时创建且切换分支:git checkout -b newMas);
切换到主分支:git checkout master;
查看当前分支:git branch;
将newMas分支合并到主分支master:git merge newMas;
删除分支:git branch –d newMas;
合并冲突:
Auto-merging readme.txt CONFLICT (content): Merge conflict in readme.txt Automatic merge failed; fix conflicts and then commit the result.
提示有文件内容冲突,git status查看当前冲突文件,
xxxxxxxxxMBP:MsgDemo Ashes$ git status On branch master Your branch is ahead of ‘origin/master’ by 2 commits. (use “git push” to publish your local commits) You have unmerged paths. (fix conflicts and run “git commit”) (use “git merge –abort” to abort the merge) Unmerged paths: (use “git add …” to mark resolution) both modified: readme.txt no changes added to commit (use “git add” and/or “git commit -a”)
readme.txt文件冲突了,重新编辑时看见冲突内容<<<<< ======= >>>>>>>由这些字符分割,解决完冲突之后,add,然后commit即可;解决完冲突,再次提交,这次合并就算完成了,不需要重新合并了。
Git merge命令合并的分支,当删除次分支之后,不会保留合并的信息,那么用以下方法:
git merge –no-ff -m “merge with no-ff” newMas; 禁用了快速合并,然后在合并的同时创建了一个新的commit,通过-m可以查出历史记录;
暂存操作,暂存当前文件的修改操作,然后就可以去别的分支干别的事情,回头接着干:
git stash 暂存当前修改
git stash apply 恢复最近的一次暂存
git stash pop 恢复暂存并删除暂存记录
git stash list 查看暂存列表
git stash drop 暂存名(例:stash@{0}) 移除某次暂存
git stash clear 清除暂存
强制删除一个没有合并的分支:git branch –D newMas;
远程分支:
查看远程仓库的信息:git remote –v
推送其他分支到远程仓库:git push origin newMas;
备注,master分支是主分支,因此要时刻与远程同步;dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;至于其他分支,可推也可不推;
标签管理,发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。
为当前最新的commit打标签:git tag v1.0,为某个commit打标签:git tag v0.9 b1d93ec,查看当前分支下所有的标签,git tag;
创建有msg(说明信息)的标签,git tag -a v0.1 -m “version 0.1 released” 1094adb;
查看指定标签信息,git show v0.1
删除本地标签:git tag -d v0.1
推送当前标签到远程:git push origin v1.0
推送所有的本地标签到远程: git push origin –tags
删除远程标签,首先删除本地标签:git tag -d v0.9,然后删除远程标签,git push origin :refs/tags/v0.9
多人协作,首先git pull 远程的修改,然后add,commit本地库,最后push origin到远程;
不管push还是pull,只要提交到远程库,都需要在本地将分支切换到远程操作的分支,然后进行push和pull;
add多个文件 : git add .
检查本地存储库是否与远程服务器的最新更改保持一致:git fetch。
如果有一些文件提交不上去,例如.a,.pch文件,那么需要修改本地.gitignore文件,屏蔽当前后缀,再次提交。