git常用命令

1719457313253.jpg

设置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 rm --cached <文件路径>
git rm -r --cached 文件夹名  # -r 表示“递归”
git commit -m ''
git push

设置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**
>>1. 新建一个目录a,然后执行git init,然后再执行pwd,复制路径url
>>2. 新建另一个目录b,然后执行,用上面目录a步骤的url,执行git clone url(若是项目在其他的服务器,则git clone 用户名(能打通ssh的用户)@ip(内网ip):/url)
>>3. 若b的目录需要push,则a目录的分支不能停在master,不然push不上去,需要切换到另外的分支。

===============================常用操作_end===============================
---
---
===============================远程仓库_start===============================
## 远程仓库

>**注:**
>>1. 本地和远程第一次操作时需要关连:加上-u参数。
>>2. git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
 git push -u 远程仓库分支 本地仓库分支:
eg:`$ git push -u origin master`
>>3. 切换关联的远程分支
$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`
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容