设置user的name和email
设置name: $ git config --global user.name "xxx"
设置email:git config --global user.email "email@gmail.com"
===============================常用操作_start===============================
常用操作
提交
git add .
提交
git commit -m '备注'
推送本地分支到某一远程分支,也可以直接git push,则为推送和当前本地分支同名的远程分支
git push origin 本地分支:远程分支
删除本地分支
git branch -d 本地分支名
删除远程分支名
git push origin --delete 远程分支名
git push origin :远程分支名
#删除远程分支名(这个方法是推送一个空分支到远程分支,从而删除)
重命名:
重命名本地分支
git branch -m 原本地分支名 重命名后的本地分支名
重命名远程分支。
在git中重命名远程分支,其实就是先删除远程分支,然后重命名本地分支,再重新提交一个远程分支。
gitignore无效的情况
问题
在.gitignore文件中添加某文件,想对其进行忽略,但是通过git status查看仍然显示该文件的状态。
原因
在git库中已经存在该文件(以前push过),而.gitignore仅对还没有加入到版本管理的的文件起作用
解决办法:
在git库中删除该文件(或者先移到项目目录外),并提交
拉取远程分支
git fetch origin branchname:branchname
(不会切换到新分支)
可以把远程某各分支拉去到本地的branchname下,如果没有branchname,则会在本地新建branchname
把要合并的本地分支合并到当前分支
git merge 要合并过来的本地分支
修改远程地址
- 方法一:直接修改
git remote set-url origin 新远程仓库地址
- 方法二:先删除,后添加
git remote rm origin
#删除远程分支
git remote add origin 新远程仓库地址
#重新添加远程分支
创建并切换分支
git checkout -b 分支名
查看两个提交之间修改过的文件
git diff --name-only <commitId-1> <commitId-2>
注意:commitId 为前八位
本地测试git
- 新建一个目录,然后执行git init,然后再执行pwd,复制路径url
- 新建另一个目录,然后执行,用上面a步骤的url,执行git clone url(若是项目在其他的服务器,则git clone 用户名(能打通ssh的用户)@ip(内网ip):/url)
- 若b的目录需要push,则a目录的分支不能停在master,不然push不上去,需要切换到另外的分支。
===============================常用操作_end===============================
===============================远程仓库_start===============================
远程仓库
注:
- 本地和远程第一次操作时需要关连:加上-u参数。
- git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
git push -u 远程仓库分支 本地仓库分支:
eg:$ git push -u origin master
- 切换关联的远程分支
$git branch --set-upstream-to=origin/remote_branch your_branch #remote_branch是远程分支名 your_branch是本地分支名
eg:git branch --set-upstream-to=origin/story_v540 story_550
1.先有本地仓库,然后关联远程仓库
要关联一个远程库,使用命令$ git remote add origin git@server-name:path/repo-name.git
关联后,使用命令$ git push -u origin master第一次推送master分支的所有内容
此后,每次本地提交后,只要有必要,就可以使用命令$ git push origin master推送最新修改
2.先有远程仓库,关联本地仓库
$ git clone git@server-name:path/repo-name.git
===============================远程仓库_end===============================
===============================多人合作_start===============================
多人协作
查看远程库的信息
git remote
git remote -v
#显示更详细的信息
流程
1.先pull到本地
2.合并,如果合并有冲突,则解决冲突,并在本地提交commit
3.后push到服务器
注意:如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name
===============================多人合作_end===============================
===============================stash_start===============================
stash
前提:必须是处于git下的文件,未add到git的文件无法使用
保存当前工作进度,将工作区和暂存区恢复到修改之前。
git stash
作用同上,message为此次进度保存的说明。
git stash save message
显示保存的工作进度列表,编号越小代表保存进度的时间越近。
git stash list
显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num},比如第二个 git stash show stash@{1}。
git stash show
恢复工作进度到工作区(不会删点原来的stash@{num}),此命令的stash@{num}是可选项,在多个工作进度中可以选择恢复,不带此项则默认恢复最近的一次进度
git stash apply stash@{num}
恢复工作进度到工作区(会删点原来的stash@{num}),此命令的stash@{num}是可选项,在多个工作进度中可以选择恢复,不带此项则默认恢复最近的一次进度
git stash pop stash@{num}
删除一条保存的工作进度,此命令的stash@{num}是可选项,在多个工作进度中可以选择删除,不带此项则默认删除最近的一次进度相当于git stash drop stash@{0}
git stash drop stash@{num}
删除所有缓存的stash
git stash clear
从最新的stash创建分支。
场景:当储藏了部分工作,暂时不去理会,继续在当前分支进行开发,后续想将stash中的内容恢复到当前工作目录时,如果是针对同一个文件的修改(即便不是同行数据),那么可能会发生冲突,恢复失败,这里通过创建新的分支来解决。可以用于解决stash中的内容和当前目录的内容发生冲突的情景。
命令:git stash branch
删除所有保存的工作进度。
===============================stash_end===============================
===============================回滚_start===============================
【本地回滚】
- 未执行git add
git checkout file`#file是要恢复的文件名。注意:这是恢复到未修改前
- 已经执行git add
git reset HEAD file
#file是要恢复的文件名。注意:这是恢复到未add前
- 已经commit
git reset HEAD^ file
#file是要恢复的文件名。注意:这是恢复到未add前
- 全部回退,已commit
git reset --hard HEAD^
#退回上个版本git reset --hard HEAD^^
#退上上一版本git reset --hard HEAD~20
#退前第20个版本
【远程回滚】:
这个是重点要说的内容,过程比本地回滚要复杂
原理:先将本地分支退回到某个commit,删除远程分支,再重新push本地分支提示:最好先把远程分支先备份再删除,重新push没问题后再删除
===============================恢复文件_end===============================
网友评论