git命令

一、前言

  Git是目前世界上最先进的分布式版本控制系统。最近使用到了git命令,所以在这里记录一下git的一些基本操作

  Workspace:工作区
  Index / Stage:暂存区
  Repository:仓库区(或本地仓库)
  Remote:远程仓库

二、git操作

2.1 基本操作

1.在当前目录新建一个Git代码库

git init

2.git下载远程代码到本地(默认主分支)

git clone  https://xxx.git 

3.git下载指定分支代码到本地

git clone xxx.git --branch 分支名

4.git拉最新代码到本地

git pull <远程主机名> <远程分支名>:<本地分支名>
git pull origin shoubaiapp-gql_1-0-1719_BRANCH 将远程分支shoubaiapp-gql_1-0-1719_BRANCH代码更新到本地仓库对应的分支上(主分支或自建分支)
git pull origin master 将远程主机 origin 的 master 分支拉取过来,与本地当前分支合并
注: git pull --rebase origin master 等价于 git rebase origin/master 

5.创建并切换分支——feature/vector_search是自定义的分支名

git checkout -b feature/vector_search
  • 创建新分支:git branch branchName

  • 切换到新分支:git checkout branchName

  • 上面两个命令可以合成为一个命令:git checkout -b branchName

6.查看工作区代码相对于暂存区的差别

git status

7.查看某一个具体文件的修改

git diff dataUGC.html

8.执行当前工作区分支下的所有改动

git stash 执行存储
git stash pop  恢复之前缓存的工作目录,将对应修改应用到当前的工作目录下

9.撤销修改

git checkout -- . 

10.撤销单个文件修改

git checkout -- index.html

11.回滚到最初的版本(强回最近一次的commit所提交的内容_不保留内容)

git reset --hard HEAD

12.手动删除文件

rm -rf 文件名 

10.手动删除文件

2.2 提交操作

1.把要提交的所有修改放到暂存区—— . 代表当前目录

git add .

2.将缓存区内容添加到本地仓库

git commit -m '注释' 

3.将本地版本库推送到远程服务器 —— origin是远程主机,feature/vector_search表示是远程服务器上的feature/vector_search分支,分支名是可以修改的

git push origin feature/vector_search

2.3 基于某个分支创建新分支

1.git下载远程代码到本地(默认主分支)

git clone  https://xxx.git

 注意:

下载分支代码到本地命令为:

git clone xxx.git --branch 分支名

2. cd 项目目录

3.根据已有分支创建新的分支

git checkout -b 新分支名 origin/原始分支名

4.将本地新增加的分支推送到远程服务器

git push origin 新分支名

2.4 将分支合并到主分支

1.从当前分支切换到主分支

git checkout master

注:master为主分支名字

2.将某个指定分支(feature/vector_search_v2)覆盖到当前分支——会自动完成git add  git commit 等操作

git merge feature/vector_search_v2

3.推送到git服务器主分支(master)

git push origin master

三、git命令扩展

3.1 git clone 与 git pull区别

相同点:

  • 都是从远程服务器拉取代码到本地

不同点:

  • git clone是在本地没有版本库的时候,从远程服务器克隆整个版本库到本地,是一个本地从无到有的过程

  • git pull是在本地有版本库的情况下,从远程库获取最新commit 数据(如果有的话),并merge(合并)到本地。git pull = git fetch + git merge

  • 使用场景:

    • 通常情况下,远程操作的第一步,是使用git clone从远程主机克隆一个版本库到本地。本地修改代码后,每次从本地仓库push到远程仓库之前都要先进行git pull操作,保证push到远程仓库时没有版本冲突

3.2 git push 命令详解

git push origin HEAD:refs/for/master 含义解释:

git push <remote 名字> <本地分支的名字> : <远程库的名字>
git push origin HEAD:refs/for/master
git push 肯定是推送
origin 远程的库的名字
HEAD 一个特别的指针,它是一个指向你正在工作的本地分支的指针,可以把它当做本地分支的别名,git这样就可以知道你工作在哪个分支
refs/for 意义在于我们提交代码到服务器之后是需要经过code review 之后才能进行merge的
refs/heads 不需要

3.3 git cr 命令详解

利用 git cr 命令代替git push origin HEAD:refs/for/远程分支

在终端中输入
git config --global alias.cr '!f() { : push ; r=$1; [[ -z $r ]] && r=origin; b=$2; t=$(git rev-parse --abbrev-ref HEAD); t=${t#refs/heads/}; [[ -z $b ]] && b=$t; cmd="git push $r HEAD:refs/for/$b"; echo $cmd; echo; $cmd; }; f'

检查是否写入git的全局配置文件
cat ~/.gitconfig

发现底部新增
[alias]
 cr = "!f() { : push ; r=$1; [[ -z $r ]] && r=origin; b=$2; t=$(git rev-parse --abbrev-ref HEAD); t=${t#refs/heads/}; [[ -z $b ]] && b=$t; cmd=\"git push $r HEAD:refs/for/$b\"; echo $cmd; echo; $cmd; }; f"

日常使用使用git cr 代替冗长的git push origin XXX:refs/for/XXX命令

3.4 git cherry-pick 命令详解

git cherry-pick <commitHash>  // 将指定的提交(commit)应用于其它分支

  • commitHash可以通过 git log 查看

3.5 git rebase

git rebase master

git checkout master // 切换到本地master分支
git pull origin master // git pull <remoteName> <branchName>, 拉取远程master分支并更新本地
git checkout branchA // 切换到本地branchA分支
git rebase master // 变基,将本地master最新的代码合进本地的branchA分支。完成后,本地的branchA分支是最新的


git rebase origin/master

git fetch // download objects and refs from another repository
git rebase origin/master // 将远端master最新的代码合进本地的branchA分支


git rebase origin master(不要使用)

参考:
  git rebase master 和 git rebase origin/master 的区别:https://blog.csdn.net/weixin_45346457/article/details/116210695
  git rebase origin master 和 git rebase origin/master的区别:https://blog.csdn.net/shengzhu1/article/details/84836314

四、git命令一些实际应用

4.1 将未合入分支但已提交commit的代码改动应用到新分支上

示例:将branch1分支改动 (未合入分支,提交了commit) 应用到一个新分支branch2上

方法一:

基于改动分支提交的hash值(是个hash分支),在代码库生成新的分支(这样新分支就包含了这部分改动)

方法二:

1. 复制下载命令

git fetch ssh://******7526/1 && git checkout FETCH_HEAD

2. 在本地随便一个分支上执行该命令

3. 然后执行 git checkout -b branch2 命令

    注意 branch2 是新分支名(可根据自己的分支名更改),本地不能事先存在该分支,存在的话,要先通过 git checkout -d 分支名称 命令进行删除

4. 这样本地的新分支 branch2 就有了 branch1 分支的改动,然后本地新分支 branch2 通过 git pull origin master --rebase 命令同步一下远程最新分支

5. 接着,在本地分支 branch2 上随便改动一点,然后git add、git commit、git push 提交即可,这样最终的远程分支 branch2 上就有了新的改动

4.2 分支合入失败

问题:在打分+2后,发现无法合入

解决办法:简单来说,就是通过 reset 命令删除此评审包含的所有commits,然后再重新提交

具体解决过程:

* 在本地仓库中,回滚本地的提交记录 
  * git fetch origin xxx(分支名) 
  *  git reset --soft origin/xxx(分支名) 
* 重新提交代码
  * git add 文件名
  * npm run commit
  *  git push origin HEAD:refs/for/xxx(分支名) 

4.3 开发分支同步master出现冲突

假设当前开发分支为dev_xxx,dev_xxx与master存在冲突导致无法直接同步master代码

解决:

1. 基于master拉出开发分支 dev_xxx_1

2. 将dev_xxx分支merger至dev_xxx_1分支,手动解决合并过程中的冲突(这样dev_xxx_1分支既同步了master的代码,又有原来dev_xxx分支的代码)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值