git使用笔记

本地操作

add和commit

add

git add a.txt b.txt
git add -A/ git add .

commit

git commit -m "message"

撤销add和commit

针对提交区:
git commit --amend 进行提交、并用该提交代替上次提交。
例如当上次提交忘记提交一些文件:git add a.txtgit commit --amend
git rebase -i X 删除X到head的提交,合并成一个新提交代替。

针对暂存区的文件:
git restore --staged a.txt, git reset head a.txt 用提交去覆盖暂存区。如果创建或者修改了某个文件,不想这一次提交,但是git add了,可以用这个命令撤销add。
git rm --cached a.txt 删除暂存区对此文件的跟踪。如果创建了新文件,不想跟踪,但是使用了git add,可以用这个命令来撤销add。如果不想跟踪某文件了,用这个命令取消跟踪。

针对本地文件:
git restore a.txt 用暂存区覆盖本地。小心使用,本地文件都会被覆盖。

注意:
1、提交的东西基本都可以恢复。例如amend覆盖的,删除的分支包含的。
2、用上次提交覆盖本地文件:git restore --staged a.txt + git restore a.txt

远程仓库

可以有多个远程仓库,远程仓库可能是只读或者可读写的。

查看:
git remote 查看远程仓库,如果是git clone获得的项目,会有origin
git remote -v 查看远程仓库,附带url信息,以及读写权限信息
git remote show <remote> 查看详细信息: 对比分支,列出pull信息
git ls-remote <remote> 查看这个仓库里有哪些分支和标签
git remote add <remote_name> url.git添加仓库
git remote rename old new 重命名仓库
git remote remove 删除仓库

git clone 命令会自动设置本地 master 分支跟踪克隆的远程仓库的 master 分支。
1、获取仓库所有分支和tag,增加前缀"origin/",这些分支不能通过本地提交使之移动,只会根据远程仓库里的分支移动而移动,因此,如果git clone后切换到origin/master分支,并commit,origin/master不会移动。
2、在origin/master节点创建master分支,并且切换到这个分支。

git fetch <remote> 下载这个仓库中本地没有的提交,下载和更新所有origin/XXX分支。
一般首次获取远程仓库用git clone,后续本地可能也有提交了,用git fetch获取远程仓库的更新。
一般会先获取远程仓库:

git remote add <remote> XX.git
git fetch <remote>

然后在本地创建分支:

git checkout origin/dev
git branch dev
git checkout dev
# 等价于
git checkout -b dev origin/dev
# 等价于
git checkout dev # 同名

git pull 通常会从最初克隆的服务器上抓取数据并自动尝试合并到当前所在的分支
当前分支跟踪了<remote>/<branch>分支,则git pull 相当于 git fetch <remote>+git merge <branch>
何时会跟踪:
1、例如远程仓库 A<- B 本地clone后,远程仓库更新为 A<- B<- C,本地master为A<-B master分支执行git pull就会更新为A<- B<- C
2、或者本地fetch后执行git checkout -b dev origin/dev也会创建dev分支跟踪远程分支,此时也可以用git pull获取最新提交。
3、也可以手动创建跟踪

git push origin --delete dev 删除远程仓库上的某个分支
git push origin dev 或者 git push origin mydev:remotedev 把dev分支推送到此仓库。
git push 把当前分支push到跟踪的远程分支上。如果没有跟踪的话,需要设置或者指定分支。
push的结果:
1、如果这个仓库没有dev分支,会创建,
2、如果有dev分支,且上次fetch/clone后没人push过,即远程仓库的最新提交是本地dev分支的祖先,则在这个分支后面添加commit。
3、否则,push失败。解决:fetch,然后merge,再push。

总结:
push和pull针对分支,clone和fetch针对仓库;
pull和fetch用于拉取,push用于提交;
pull可以用fetch+merge替代,因此只需要理解两个指令,fetch和push即可。

常见使用流程

本地git项目上传到远程仓库

  1. 创建或进入项目
    git init
  2. 在远程仓库创建项目,比如在码云创建一个仓库test。
  3. 添加仓库
    git remote add origin https://gitee.com/xx/test.git
  4. 把本地代码push到这个仓库
    git push -u origin "master"

下载已有的代码,合作开发。

  1. git clone www.XX.git下载
  2. 已经完成,现在可以把本地代码push到这个仓库了
    git push -u origin "master"

标签

git tag 查看所有
git tag -l "v1.1.*" 搜索
git show v1.1 查看某条标签

给上一次提交打标签:
轻量标签:仅仅一次提交的引用. git tag v1.4-lw
附注标签:附带了打标签者的名字、电子邮件地址、日期时间。git tag -a v1.4 -m "my version 1.4"

给某一次提交打标签:
git tag -a v1.2 9fceb02

git tag -d 删除标签

git checkout -b newbranch v1.5在某个分标签创建分支

上传标签:
git push origin v1.5 创建远程标签
git push origin --delete v1.5 删除远程标签

别名

git config --global alias.A 'B' 使得A成为B指令串的别名

分支

查看
git branch
git branch -v
git branch --merged
git branch --no-merged
git show-branch 详细列出所有分支
git show-branch bug/* 详细列出某类分支
git merge-base original-branch new-branch 指定起点和终点,查找分支点

创建
git branch newBranch [start-branch] (从指定节点(默认当前节点))启动新的分支。
切换到分支(需要先commit或者stash)

git checkout dev
可选参数
-m 如果本地文件和上次commit不同:尝试合并本地和目标分支。
-f 强制切换分支,丢失本地文件。

创建并切换:
git checkout -b dev

删除,要理解分支是指向头的指针,而不是节点集合。
git branch -d branchName 只能删除merge后的分支。
git branch -D branchName 强制删除。

merge

只能合并两个(或多个)在同一仓库里的分支。分支可以引用的其他仓库。

merge结果:
在这里插入图片描述

在master分支,执行 git merge dev结果如下

  1. 如果master是dev的祖先。执行结果:master向前移动,指向dev。
    例如master本来指向c,dev指向d,则执行结束后master指向d。
  2. 如果dev是master的祖先,结果:操作失败,提示Already up to date. 因为新分支没必要往回走。
  3. 否则,考虑master,dev,以及它们的共同祖先。结果:生成一个新提交,并让master指向它。
    例如master本来指向D,dev指向G,它们共同祖先是B,则结果是:首先,生成一个新提交H,H有两个父亲,其次,master指向H。

总结:

  1. 对于情况1、3,执行完merge后,dev也就失去了意义,可以删掉。
  2. 当我们想在master分支上做修改时,会新建分支dev,dev提交几次后,需要merge到master里面,即切换到master分支,执行 git merge dev,此时就会出现情况1或者情况3。
  3. 在情况3中,merge后,dev分支发起的新提交接在dev后面,即G后面.
  4. 交换master和dev的位置,生成的H节点是一样的,区别是dev而不是master会向前移动。因此想移动谁,保留谁,就在哪个分支上merge另一个分支。

合并冲突:
当两个分支,对比分歧点(C),都修改了同一文件的同一行,就会产生冲突。每一个冲突都需要手动解决:本地打开有冲突的文件,修改完后 git add a.txt ,git commit。修改commit信息。
如果没有冲突,则merge后,直接修改commit信息。

监控状态

log,
diff,
show : show-branch
status:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值