多人协作的工作模式通常是这样:
- 首先,可以试图用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.git
Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。 -
创建dev分支并切换到dev分支
git checkout -b dev
git checkout 命令上加上-b参数表示创建并切换,相当于一下两个命令:
git branch dev
创建dev分支
git checkout dev
切换只dev分支
-
查看分支
git branch
git 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文件夹及所有的子目录和文件
网友评论