最全操作git命令,快速手册
设置账号和密码
git config --local user.name "名字"
git config --global user.name "名字"
git config --glboal user.email "邮箱
查看用户
git config --get user.name
查看所有
git config --list --global
删除用户
git config --global --unset user.name eoe
本地生成.ssh密钥
ssh-keygen –t rsa –C “531833998@qq.com”
cat ~/.ssh/id_rsa.pub
免登陆
mkdir .ssh | chmod 700 .ssh
touch authorized_keys | chmod 700 authorized_keys
-
.ssh目录的权限必须是700
-
.ssh/authorized_keys文件权限必须是600
初始化服务器端仓库
git –bare init /home/git/myRep.git,
版本回退
git reset --hard HEAD^
git reset --hard 57ceb93e92e52bd612fb397a1ab7a16183406e9d
查看修改文件内容
git diff
查看文件状态
git status
文件删除
rm test.txt
git --cached a //删除暂存区
可以丢弃工作修改
git checkout -- file可以丢弃工作区的修改:
git checkout -- readme.txt
远程仓库操作
git remote add 名字 地址
git remote rm 名字
gitignore无效解决
git rm -r --cached .
git add .
git commit -m 'update .gitignore'
开发,创建分支
git checkout -b dev
或
git branch dev
git checkout dev
查看分支
git branch
切换分支
git checkout master
合并分支
git merge dev
删除分支
git branch -d dev
实践
git checkout -b dev
git add .
git commit -m "提交"
git checkout master
git merge dev
//删除dev分支
git branch -d dev
查看分支合并图
git log --graph
分支管理
禁用Fast forward模式,Git会生成新的提交
git merge --no-ff -m "新的提交" dev
分支策略
master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
再把dev分支合并到master上,在master分支发布1.0版本;
你和你的小伙伴们每个人都在dev分支上干活
每个人都有自己的分支,时不时地往dev分支上合并就可以了
image
合并分支时,加上--no-ff
参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
多人合作
1.每个人都clone一个
2.然后提交到分支dev里面
3.主合并分支实现功能,使用--no-ff
Bug分支
bug就像家常便饭一样。有了bug就需要修复,在Git中,由于分支是如此的强大,所以,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。
当你接到一个修复一个代号101的bug的任务时,很自然地,你想创建一个分支issue-101来修复它,但是,等等,当前正在dev上进行的工作还没有提交
Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作:
git stash
git checkout master
git checkout -b issue-101
$ git add readme.txt
$ git commit -m "fix bug 101"
修复完成后,切换到master分支,并完成合并,最后删除issue-101分支:
git merge --no-ff -m "merged bug fix 101" issue-101
原计划两个小时的bug修复只花了5分钟!现在,是时候接着回到dev分支干活了
git checkout dev
工作区是干净的,刚才的工作现场存到哪去了?用git stash list命令看看:
git stash list
一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
另一种方式是用git stash pop,恢复的同时把stash内容也删了:
销毁未来分支
你终于接到了一个新任务:开发代号为Vulcan的新功能,该功能计划用于下一代星际飞船。
git checkout -b feature-vulcan
git add vulcan.py
git commit -m "add feature vulcan"
git checkout dev
就在此时,接到上级命令,因经费不足,新功能必须取消
分支还是必须就地销毁:
git branch -d feature-vulcan
强行
git branch -D feature-vulcan
多人协作
实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin
查看远程信息
git remote
git remove -v 详细
推送分支
git push origin master
如果要推送其他分支,比如dev,就改成:
$ git push origin dev
- master分支是主分支,因此要时刻与远程同步
- dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
- bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
- feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
抓取分支
多人协作时,大家都会往master和dev分支上推送各自的修改。
多人工作合作方式
- 首先,可以试图用git push origin <branch-name>推送自己的修改;
- 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
3.如果合并有冲突,则解决冲突,并在本地提交
4.没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!
如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建
git branch --set-upstream-to <branch-name> origin/<branch-name>。
查看文件修改了那些
暂存区和最近一次提交的比较
git diff --cached 文件
比较工作区和最新版本
git diff HEAD filename
比较工作区与指定的 commit -id 的差异
git diff commit-id filename
比较暂存区与指定 commit-id 的差异
git diff --cached commit-id filename
比较两个 commit -id 的差异
git diff commit-id commit-id
文件忽略
在你仓库下建立.gitignore
支持正则写法,文件全部匹配模式
1)空格不匹配任意文件,可作为分隔符,可用反斜杠转义
2)以“#”开头的行都会被 Git 忽略。即#开头的文件标识注释,可以使用反斜杠进行转义
'/aa/' 表示根目录下的aa文件夹和文件全部忽略
'/aa/*'同上效果
'/aa'同上效果
*.log: 表示忽略所有 .log 文件
!/bin/run.sh 表示不忽略bin目录下的run.sh文件
git 忽略文件模式监听
有时候我们改了文件的权限,默认下,他也把我们的模式也监听进去了,这个我们可不想要啊,直接去掉
# 全局设置
git config --global core.filemode false
# 本地
git config core.filemode false