git

最全操作git命令,快速手册

2019-01-07  本文已影响0人  空气KQ

设置账号和密码

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
  1. .ssh目录的权限必须是700

  2. .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分支上推送各自的修改。

多人工作合作方式

  1. 首先,可以试图用git push origin <branch-name>推送自己的修改;
  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用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
上一篇下一篇

猜你喜欢

热点阅读