关于git的知识在廖雪峰Git是什么讲的很清楚了。但是要实际结合场景才能用的明白。

通用新建仓库

git init
git add .
git commit -m "Modified the issue mentioned in the comment"
git branch -M main
git remote add origin 
git push https://xxx.git

更新修改代码

git status  # 查看是否有冲突
git add .  # 将当前工作目录中更改或者新增的文件加入到Git的索引中
git commit -m ""  # 添加注释(必填)
git push -u origin main  # 提交修改到远程仓库

git push反悔

在往Github仓库push,很多时候因为有超过限制大小的文件所以push不成功,这个时候操作如下:

  • git log查看hash值,找到main那个哈希值这是远程现在的状态(其实就像查看这些指针指向一样)
  • git reset --soft <commit-hash> 然后删除不想要的大文件,正常提交步骤

由于仓库提交了一个pr,对仓库的改动自动关联到pr了,想撤回这次提交:
回滚到上一个提交(即移除刚刚推送的提交)如上个场景。

–soft 只更改提交记录,不影响文件;–hard 则完全重置,包括删除未提交的本地更改。

git reset –soft 和 git reset –hard 都只影响本地仓库,不会直接修改远程仓库。如果需要同步远程仓库的状态,一定记得 git push。

新建分支开发新功能

每个 PR(Pull Request/Merge Request)必须关联一个独立的分支,这是 Git 协作的基本规则。一般来说,每次小改动一个pr,那么都需要新建一个分支去做修改。并入主线后可以把那个分支删除了。

git checkout master     # 切换到 master 分支
git pull origin master  # 拉取远程最新的 master 内容(确保与远程仓库一致)
# 或者不想从master开始做你的开发,那么就写你要基于哪个分支开发的对应分支名字

git checkout -b 某个新分支名称         # 创建新分支
# 或者你的新分支已经有了,直接重置到 master 的状态
git checkout 某个新分支名称         # 切换到你的分支

# 首次推送到远程需设置上游分支(关联远程分支)
git push origin 某个新分支名称

其中 git checkout xx 是转换分支的意思
git checkout -b xx 是新建一个xx分支,并转换过去的意思

拉取/克隆某个分支的代码

  1. 一种方式是克隆后切换分支

    # 克隆仓库(默认只拉取默认分支,通常是 master/main)
    git clone https://xxx.com/xxx.git
    
    # 进入项目目录
    cd xxx
    
    # 切换到 yyy 分支
    git checkout yyy
  2. 直接克隆 yyy 分支

    git clone -b yyy https://xxx.com/xxx.git
  3. 如果之前已经克隆过仓库,只需拉取 yyy 分支的最新代码:

    git fetch origin yyy    # 拉取远程 yyy 分支到本地
    git checkout yyy         # 切换到该分支
    git pull origin yyy     # 更新代码

根据review意见重新提交

添加改动并提交(选择追加到最后一次提交,避免历史杂乱):

git checkout yyy # 确保在提交的那个pr分支上操作
git add .                      # 暂存修改
git commit --amend             # 追加到上一次提交(修改提交信息)
git push origin yyy --force   # 强制推送(覆盖远程分支)

(使用git commit --amend修改提交后,必须通过git push --force-with-lease(推荐)或git push --force强制推送。这是因为 --amend重写了提交历史,导致本地和远程的分支历史不一致,Git会拒绝常规的git push。)强制推送是安全的,前提是你确定自己是唯一修改分支的人。

master分支有更新导致冲突

拉取 master 最新代码并 rebase

git checkout yyy
git fetch origin master      # 获取远程 master 最新状态

git rebase origin/master     # 变基到 master
或者
git merge origin/master # 将 master 合并到当前分支

手动解决冲突ing……
决定完冲突部分要保留哪一方后,继续 rebase

git add <冲突文件>
git rebase --continue
git push origin yyy --force # 强制推送

在test分支改完pr建议再合并去pr所在分支

git checkout yyy          # 切换到目标pr分支
git merge test            # 合并 test 分支的改动
git push origin yyy       # 推送更新到远程

文章作者: 易百分
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 易百分 !
  目录