个人git命令收集文章

git命令收集

Git 命令行提交代码详细操作
史上最详细Git使用教程
Git命令大全
在这里插入图片描述

分支管理概念

创建合并删除

一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点:
在这里插入图片描述
每次提交,master分支都会向前移动一步,这样,随着你不断提交,master分支的线也越来越长。
当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上:
在这里插入图片描述
Git创建一个分支很快,因为除了增加一个dev指针,改改HEAD的指向,工作区的文件都没有任何变化!
不过,从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变:
在这里插入图片描述
假如我们在dev上的工作完成了,就可以把dev合并到master上。Git怎么合并呢?最简单的方法,就是直接把master指向dev的当前提交,就完成了合并【这里只是一种最简单的情况】:
在这里插入图片描述
所以Git合并分支也很快!就改改指针,工作区内容也不变!
合并完分支后,甚至可以删除dev分支。删除dev分支就是把dev指针给删掉,删掉后,我们就剩下了一条master分支:
在这里插入图片描述

解决冲突

当先后在 以master为源创建的的feature1分支 和 master分支中,修改了同一个文件的同一行。此时这两个分支分别有了新的提交,如下图所示:
在这里插入图片描述
这种情况下无法进行快速合并,只能试图把各自的修改合并起来,这样有可能会造成冲突:

$ git merge feature1
Auto-merging test.txt
CONFLICT (content): Merge conflict in test.txt
Automatic merge failed; fix conflicts and then commit the result.

接下来需要实用git status 查看冲突文件,之后修改这个冲突文件,修改之后在add commit。现在,master分支和feature1分支变成了下图所示:
在这里插入图片描述
git log --graph --pretty=oneline --abbrev-commit可以看到分支的合并情况,包括分支合并图(–graph)、一行显示(–pretty=oneline)、提交校验码缩略(–abbrev-commit)显示:

$ git log --graph --pretty=oneline --abbrev-commit
*   cf810e4 (HEAD -> master) conflict fixed
|\  
| * 14096d0 (feature1) AND simple
* | 5dc6824 & simple
|/  
* b17d20e branch test
* d46f35e (origin/master) remove test.txt
* b84166e add test.txt
* 519219b git tracks changes
* e43a48b understand how stage works
* 1094adb append ABC
* eaadf4e a new file

分支管理策略

通常,合并分支时,Git会用快速合并模式(Fast forward),但这种模式下,删除分支后,会丢掉分支信息。一般使用如下的普通合并模式,在删除分支后还能保留分支信息:

$ git merge --no-ff -m "merge with no-ff" dev

分支策略
master分支是最稳定的,只能用于发布新版本,平时不能在上面进行开发,要在新建的分支上进行开发,比如dev,这时dev是不稳定的,到产品1.0发布时,将dev分支和master分支合并,在master分支上发布1.0版本。
所以团队合作的分支看起来就像这张图一样:
在这里插入图片描述

bug分支

场景:手头有正在进行的未完成修改工作。修复bug时,我们会创建一个bug分支进行修复,修复完合并,删除分支。

#保存add之后的工作现场
$ git stash 
Saved working directory and index state WIP on dev: f52c633 add merge
#查看下工作区是否干净
$ git status
#等bug修复完分支删除后,我们先查看下stash
$ git stash list
stash@{0}: WIP on dev: f52c633 add merge
#用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除
$ git stash apply stash@{0}
#用git stash pop,恢复的同时把stash内容也删了
$ git stash pop

基本配置

Git 一共有3个配置文件:

  • 仓库级的配置文件:在仓库的 .git/.gitconfig,该配置文件只对所在的仓库有效。
  • 全局配置文件:Mac 系统在 ~/.gitconfig,Windows 系统在 C:\Users<用户名>.gitconfig。
  • 系统级的配置文件:在 Git 的安装目录下(Mac 系统下安装目录在 /usr/local/git)的 etc 文件夹中的 gitconfig。
# 查看当前生效的配置信息
$ git config -l

# 配置提交用户信息,--global代表全局
$ git config --global user.name <用户名>
$ git config --global user.email <邮箱地址>

# 根据不同的项目绑定不同的用户名和邮箱:进入项目根目录(去掉–global即可):
```shell
git config user.name “Your_userName”
git config user.email “Your_userEmail”

# 更改Git缓存区的大小
# 缓存大小单位:B,例如:524288000(500MB)
$ git config --global http.postBuffer <缓存大小>

# 配置可以缓存密码,默认缓存时间15分钟
# 缓存时间单位:秒
$ git config --global credential.helper 'cache --timeout=<缓存时间>'

# 配置长期存储密码
$ git config --global credential.helper store

常用命令

  1. 查看历史命令
git reflog
  1. 克隆现有的仓库,若没有自定义本地仓库名称,则默认远程仓库名称
git clone 远程仓库URL (本地仓库自定义名称)
  1. 查看仓库所有分支
git branch -a
  1. 新建分支并切换至新分支
git checkout -b 分支名
  1. 推送本地分支到远程分支(远程分支与本地分支同名)
git push origin 分支名:分支名
# 首次推送,推送远程分支并绑定远程分支
git push -u origin 分支名
  1. 让本地分支与远程分支建立关联
git branch --set-upstream-to=origin/分支名
git branch -u origin/分支名

注:如第五步操作未执行,拉取远程代码需执行:git pull origin 分支名,需标明拉取远程的具体分支名。

  1. 切换至其他分支
git checkout 分支名
  1. 删除分支:先切换到非删除的分支,同个分支一般先删除远程分支再删除本地分支
    7.1. 删除远程分支
git push origin --delete 分支名

7.2. 删除本地分支

git branch -d XX :普通删除分支
git branch -D XX :强制删除分支
  1. 查看本地仓库当前代码状态
git status
  1. 添加要提交的代码文件
git add . : 添加所有文件 
git add file1 file2 file3 : 自定义添加多个文件,文件间实用空格隔开
git add -u [<文件路径>] : 添加所有修改、已删除的文件到暂存区中,不包含新增文件
  1. 提交到本地仓库
git commit -m “描述语句”
  1. 执行第10点后,要执行一下git pull,合并分支最新代码,查看是否会冲突,若会冲突
    11.1 点进冲突文件进行修改冲突的代码然后再重新执行第11点;
    11.2 回滚代码:
(1). git stash   //这是将本地代码回滚至上一次提交的时候,就是没有自己新改的代码;
(2). git pull origin分支名 //将远程的代码拉下来,“origin分支名”一般可以省略;
(3). git stash pop //将上面git stash回滚的代码释放出来,相当于将自己修改的代码与下拉的代码合并;
(4). 重新从第11点开始执行;
  1. push到远程仓库
git push
  1. 合并分支代码:如main分支合并至dev分支,则先切换至dev分支
git merge main //表示将main分支合并至dev分支

13.1 合并分支出现冲突
修改冲突文件代码,然后按需保留即可,然后 add commit pull push

标签管理

# 打印所有的标签
$ git tag

# 添加轻量标签,指向提交对象的引用,可以指定之前的提交记录
$ git tag <标签名称> [<commit ID>]

# 添加带有描述信息的附注标签,可以指定之前的提交记录
$ git tag -a <标签名称> -m <标签描述信息> [<commit ID>]

# 切换到指定的标签
$ git checkout <标签名称>

# 查看标签的信息
$ git show <标签名称>

# 删除指定的标签
$ git tag -d <标签名称>

# 将指定的标签提交到远程仓库
$ git push <远程仓库的别名> <标签名称>

# 将本地所有的标签全部提交到远程仓库
$ git push <远程仓库的别名> –tags

一些方法记录

新建本地仓库并发布到远程仓库

git init -- 新建一个本地仓库
git add README.md -- 将README.md文件加入到仓库中
git commit -m "first commit" -- 将文件commit到本地仓库
git remote add origin https://github.com/XuDaojie/Lee.git -- 远程添加新仓库,origin只是一个远1程仓库的别名,可以随意取
git push -u origin master -- 将本地仓库push远程仓库,并将origin设为默认远程仓库,也就是master h绑定远程仓库

本地打标签并推送到远程

不在远程新建分支

git checkout -b test_tag --新建分支
git tag logcoworkerdaasnj -- 本地打标签
git push origin logcoworkerdaasnj  -- 推送本地标签到远程

带有子模块的git常用命令

git clone <repository> --recursive  //递归的方式克隆整个项目
git submodule add <repository> <path> //添加子模块
git submodule init //初始化子模块
git submodule update //更新子模块
git submodule foreach git pull  //拉取所有子模块

git 子模块的操作

添加子模块非常简单,命令如下:
git submodule add <url> <path>
其中,url为子模块的路径,path为该子模块存储的目录路径。
执行成功后,git status会看到项目中修改了.gitmodules,并增加了一个新文件(为刚刚添加的路径)
git diff --cached查看修改内容可以看到增加了子模块,并且新文件下为子模块的提交hash摘要
git commit提交即完成子模块的添加

子模块的使用
git submodule init
git submodule update

或者

git submodule update --init --recursive

执行后,子模块目录下就有了源码,再执行相应的makefile即可

子模块的更新

git rebase合并多次commit

将多次commit合并,只保留一次提交历史记录

  1. git log查看提交历史
  2. git rebase -i HEAD~6 or git rebase -i hasdid
  3. pick修改为squash 或者fixup, 后者是忽略本次提交的log
  4. git 会压缩提交历史,若有冲突,需要进行修改,修改的时候保留最新的历史记录,修复冲突之后执行
    git add .git rebase --continue
    如果想要放弃本次压缩,使用命令git rebase --abort
  5. 若无冲突 or 冲突已 fix,则会出现一个 commit message 编辑页面,修改 commit message ,然后 输入:wq or x 保存退出。
  6. 提交git push -f or git push --force
  7. 查看远程仓库,之前多次提交的commit已经被合并成一次commit

已删除远程分支但本地还能看到远程分支

git remote prune origin
按照远程仓库裁剪本地记录

撤销本地所有修改回退历史版本

git checkout . //未add
git checkout -- filepathname //未add,撤销指定文件修改,新建文件需要自己手动删除
git reset HEAD filepathname //已add,撤销指定文件,回到未add状态
git reset HEAD . //已add,撤销本地所有文件的修改,回到未add状态
git reset --hard HEAD^ //已commit,回退到上一次commit的状态,HEAD^n会退上个版本
git reset --hard commitid //已commit,回退到任意版本

git 新建本地分支,并对应建立远程分支和推送到远程分支

git clone http://gitlab.xxxxx.com/xxxxx/xxxxx.git
cd xxxxx/
git log//找到对应版本的SHA值 例如2b1c225dcbbc4e1da11164af945344d88bc8f559
git checkout -b 新分支名 2b1c225dcbbc4e1da11164af945344d88bc8f559 //不会和远程分支建立映射关系
git fetch origin 远程分支名x:本地分支名x //不会和远程分支建立映射关系
git branch //查看分支是否创建成功
git push origin 本地新分支名:远程新分支名 //不存在会创建分支,推送本地cod到远程分支仓库
git branch -u origin/远程新分支名 //和远程新分支名建立映射关系
git branch --unset-upstream //撤销本地分支与远程分支的映射关系
git branch -vv //查看本地分支和远程分支映射关系

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值