git 四个模块:
remote 远程仓库 origin
Repository 本地仓库
Index 暂存区
Workspace 工作区
我们在每个分支上所做的修改都是独立的,不会影响到其他分支。切换分支的时候,会使用分支上最新的提交来还原暂存区和工作区。
git常用操作:
增加删除文件(均为保存在暂存区):
git add [file1] [file2] … # 添加指定文件到暂存区
git add [dir] # 添加指定目录到暂存区,包括子目录
git add . # 添加当前目录的所有文件到暂存区
git add -p # 添加每个变化前,都会要求确认,对于同一个文件的多处变化,可以实现分次提交
git rm [file1] [file2] … # 删除工作区文件,并且将这次删除放入暂存区
git clean -d -f 删除本地清除工作区的文件
代码提交
git commit -m [message] # 提交暂存区到本地仓库区
git commit [file1] [file2] … -m [message] # 提交暂存区的指定文件到仓库区
git commit -a #提交工作区自上次commit之后的变化,直接到仓库区
git commit -v # 提交时显示所有diff信息
git commit --amend -m [message] #使用一次新的commit,替代上一次提交
分支
git branch # 列出所有本地分支
git branch -r # 列出所有远程分支
git branch -a # 列出所有远程和本地的分支
git branch [branch-name] # 新建一个分支,但依然停留在当前分支
git checkout -b [branch] # 新建一个分支,切换到在该分支
git branch --set-upstream [branch] [remote-branch] # 建立追踪关系,在现有分支与指定的远程分支之间
合并分支!!!
git merge [branch] #合并当前分支和制定分支
查看信息
git st # 显示有变更的文件
git diff # 显示暂存区和工作区的差异
git diff HEAD # 显示工作区与当前分支最新commit之间的差异
git reflog # 显示当前分支的最近几次提交
同步
git fetch [remote] # 下载远程仓库的所有变动
git remote -v # 显示所有远程仓库
git push [remote] [branch] # 上传本地指定分支到远程仓库
git pull [remote] [branch] # 取回远程仓库的变化,并与本地分支合并
git push --set-upstream origin develop #关联本地develop分支的upstream分支
git push -u origin develop #这个操作在push的同时会指定当前分支的upstream
撤销
git checkout . # 恢复暂存区的所有文件到工作区
git checkout [commit] [file] # 恢复某个commit的指定文件到暂存区和工作区
git checkout [file] # 恢复暂存区的指定文件到工作区
git revert [commit] #新建一个commit,用来撤销指定commit ,后者的所有变化都将被前者抵消,并且应用到当前分支
git revert 也是撤销命令,区别在于reset是指向原地或者向前移动指针,git revert是创建一个commit来覆盖当前的commit,指针向后移动
git revert 撤销一个已经push的commit
git reset 用来撤销一个没有push的commit
git reset 和git revert
git 发布div 步骤:
开发分支上:git add .git commit -m ""git pushgit merge origin/master git push
git co master git pull
git co dev git pull git merge origin/mastergit add . ait commitgit merge 开发分支
可删除本地dev分支,每次需要的时候从远程拉:git br -D dev git co origin/dev -b dev
git 分支命名规范
如:20170910-bugfix-ARM-1148前面是日期,后面是jira号,中间是自己的功能名称
合并分支注意:
合并分支是最容易产生问题的。操作之前注意两点:
1、检查一下当前所在分支及当前分支状态。
2、dev、release、qa、test等测试环境的分支一定不要往自己的开发分支或者master分支合并。
理解并记住这两点能避免很多不必要的问题
生成密钥的方法:
- 检查SSH keys是否存在
ls -al ~/.ssh
2.生成新的ssh key
ssh-keygen -t rsa -C "your_email@example.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/your_home_path/.ssh/id_rsa): #回车即可生成~/.ssh目录
3.输入passphrase(本步骤可以跳过)#即直接回车
Enter passphrase (empty for no passphrase): [Type a passphrase]
Enter same passphrase again: [Type passphrase again]
此时会生成文件
4.把sshkey添加到git agent上
eval “$(ssh-agent -s)”
返回:Agent pid 59566
ssh-add ~/.ssh/id_rsa
5.将ssh key添加到GitHub中
pbcopy < ~/.ssh/id_rsa.pub
切换分支的时候最好保持一个清洁的工作区域
a. add并且commit,再checkout,提交到当前分支
b. add但不commit,可以stash,然后checkout回来之后stash apply重新获取刚才的变更,在commit,提交到当前分支 推荐
原因:
一个本地的git repo只有一个工作区和暂存区,但是有多个分支的提交区,而我们的checkout只是将HEAD指针从一个分支切换到另一个分支。
git add 之后没有commit 之前有三种状态Untracked files,Changes not staged for commit,Changes to be committed可以随意转换