设置user的name和email
设置name: $ git config --global user.name "xxx"
设置email:git config --global user.email "email@gmail.com"
===============================常用操作_start===============================
常用操作
推送本地分支关联远程
git push --set-upstream origin 分支名
从远程仓库里拉取一条本地不存在的分支时git checkout -b 本地分支名 origin/远程分支名
git fetch
是将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支中。
而git pull
则是将远程主机的最新内容拉下来后直接合并,即:git pull = git fetch + git merge
,这样可能会产生冲突,需要手动解决。
git fetch <远程主机名>
这个命令将某个远程主机的更新全部取回本地
提交:
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 -v)
- 方法一:直接修改
git remote set-url origin 新远程仓库地址
- 方法二:先删除,后添加
git remote rm origin
#删除远程分支
git remote add origin 新远程仓库地址
#重新添加远程分支
- 新增其他远程仓库
git remote add repo1 <repository-url-1> # 新增第一个远程仓库
git remote add repo2 <repository-url-2># 新增第二个远程仓库
# repository-url-1和repository-url-2是对应仓库url
# repo1 和repo2随便起,等于别名
git push repo1 master # 推送master到第一个远程仓库
git push repo2 master # 推送master到第二个远程仓库
gitremote命令用于管理远程仓库,在本地仓库中添加、删除和查看远程仓库,所以添加的远程仓库,只在本地,不会在远程。
git remote -v:查看当前所有远程仓库的详细信息,包括名称和URL
git remote rename:重命名一个远程仓库的名称。
git remote remove:删除一个远程仓库,使其不再与本地仓库关联
git remote show : 查看所有远程仓库
# 设置git push的默认分支
git branch --set-upstream-to=origin/<branch_name>
这个命令会将你当前的分支设置为跟踪指定的远程分支。意思是本来dev分支是默认推送到远程的dev分支,现在这样就可以,dev默认推送到test分支
# 你可以在第一次push到远程仓库的时候,使用-u选项来指定默认的上游仓库:
git push -u <origin> <branch_name> # git push -u repo1 master
这个命令会将origin设置为你的默认远程仓库,并将你当前的分支设置为跟踪指定的远程分支。
# 查询默认远程仓库 :在仓库根目录输入git config -e或者cat .git/config
--------------------------------------------------------------
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = git@e.coding.net:shuaiqifeng/webhook.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = repo1
merge = refs/heads/master
[remote "repo1"]
url = git@gitee.com:fizz001/webhook.git
fetch = +refs/heads/*:refs/remotes/repo1/*
--------------------------------------------------------------
其中[branch "master"]的信息就是显示默认远程分支了
创建并切换分支
git checkout -b 分支名
查看两个提交之间修改过的文件
git diff --name-only <commitId-1> <commitId-2>
注意:commitId 为前八位
本地测试git
- 新建一个目录a,然后执行git init,然后再执行pwd,复制路径url
- 新建另一个目录b,然后执行,用上面目录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===============================
===============================标签_start===============================
1、已打的标签列表:git tag
;如:git tag v1.0.1
2、给当前分支打上一个标签:git tag 标签名
;如:git tag v1.0.1
3、默认是在本地打上标签,而并不会推送到远程,所以需要推送到远程:git push origin 标签名
;如:git push origin v1.0.1
4、Git中不能真的检出一个标签,因为他们并不能像分支一样来回移动。如果想要工作目录与仓库中特定地标签版本完全一致,可以使用git checkout -b [新分支名] [标签名]
在特定地标签上创建一个新分支。如:git checkout -b version1 v1.0.0
5、删除本地标签git tag -d [标签名]
6、删除远程标签git push origin :refs/tags/[标签名]
注意:当标签名和某个分支相同,则推送到远程时会报错。
git push origin 标签名
;报错信息:error: src refspec dev matches more than one
;解决办法就是删除标签,重新起另外的标签名,git tag -d [标签名]
===============================标签_end================================
删除本地有但在远程库已经不存在的分支
git remote prune origin