多人协作的工作模式通常是这样:
- 首先,可以试图用git push origin branch-name推送自己的修改;
- 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
- 如果合并有冲突,则解决冲突,并在本地提交;
- 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
- 如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。
基本操作
-
git init初始化仓库 -
git add <dir><file>添加文件到暂存区 -
git commit -m “must”将暂存区的文件提交到本地版本仓库中 -
git status查看工作区的状态 -
git diff <file>查看具体修改的内容 -
git log <--pretty=oneline>查看提交历史,以便确定要回退到哪个版本(pretty=online参数表示一行显示)
-
回退版本
在git中HEAD表示当前的版本,如果要回退到上一个版本使用HEAD;回退到上上版本使用HEAD^;如果药回退到100个版本之前使用HEAD~100比较方便
git reset --hard HEAD^回退到上一个版本git reset --hard HEAD^^回退到上上个版本git reset --hard HEAD~100回退到第一百个版本git reset --hard commitid回退到指定的版本git reset --hard filename.txt将暂存区的修改撤销
git reflog看命令历史,以便确定要回到未来的哪个版本git diff HEAD -- filename.txt查看工作区和版本库里面最新版本的区别
- 丢弃工作区的修改
两种情况:
第一种:是你还没有将修改添加到暂存区,现在撤销修改就会恢复到和版本库一致;
第二种:是你已经将修改提交到暂存区,然后又进行了修改,这时你撤销修改会恢复到最近一次添加到暂存区的状态
总之就是使工作区的文件恢复到最近一次commit、add时的状态
* git checkout -- filename.txt #git checkout -- filename.txt 其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
-
git rm filename.txt --> git commint -m "delete filename.txt"删除版本库中文件
-
git remote add origin git@github.com:zhouyuntao/learngit.git关联一个远程库
-
第一次推送master分支的所有内容
git push -u origin master把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令 -
本地修改提交至远程
git push origin master把本地master分支的最新修改推送至GitHub -
克隆一个本地库
git clone git@github.com:zhouyuntao/gitskills.gitGit支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。 创建dev分支并切换到dev分支
git checkout -b dev git checkout 命令上加上-b参数表示创建并切换,相当于一下两个命令:
git branch dev 创建dev分支
git checkout dev 切换只dev分支
-
查看分支
git branchgit branch 会列出所有的分支,当前分支前面会标一个*号 合并分支
git merge dev git merge 默认时Fast forward模式。这种模式下,删除分支后,会丢掉分支信息。
git merge --no-ff dev -m "" 普通模式合并,会产生commit记录,推荐。
git branch -d dev删除分支git log --graph --pretty=oneline --abbrev-commit查看分支合并情况git stash把当前工作现场“储藏”起来,等以后恢复现场后继续工作git stash list列出存储的工作现场恢复工作现场
git stash apply恢复现场,但stash内容并没有删除需要通过
git stash drop删除stash内容。当然,你可以使用
git stash pop恢复的同时把stash内容也删了,一步到位
git stash apply stash@{0}恢复指定的stash
git branch -D feature-001删除未合并的分支clone远程库时,默认本地只有master主分支的,如果需要在dev分支上继续修改那么在clone完成后使用
git checkout -b dev origin/dev dev分支拉取到本地继续开发
git pull origin dev拉取dev分支的修改数据本地分支与远程分支的链接(如果git pull提示“no tracking information”)
git branch --set-upstream branch-name origin/branch-name
- 打标签
git tag <tagname> 打标签,默认时打在罪行提交的commit上的
git tag <tagname> <commitid> #将标签打在指定的地方
git tag <tagname> <commitid> -m ""` 给标签添加注解
git tag -a <tagname> -m "" commitid -s 用私钥签名一个标签
git tag -d <tagname>删除标签git push origin <tagname>#可以推送一个本地标签;git push origin --tags#可以推送全部未推送过的本地标签;git tag -d <tagname>可#以删除一个本地标签;git push origin :refs/tags/<tagname>#可以删除一个远程标签。git config --global color.ui true#让git显示不同的颜色,让输入更加醒目将文件夹移除版本控制
git rm -r -n --cached build/* #-n 加上这个参数,执行目录时时不会删除任何文件的,而是展示将要删除的文件列表
git rm -r -cached build/* 从版本库中移除build文件夹及所有的子目录和文件