关于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分支,并转换过去的意思
拉取/克隆某个分支的代码
一种方式是克隆后切换分支
# 克隆仓库(默认只拉取默认分支,通常是 master/main) git clone https://xxx.com/xxx.git # 进入项目目录 cd xxx # 切换到 yyy 分支 git checkout yyy
直接克隆 yyy 分支
git clone -b yyy https://xxx.com/xxx.git
如果之前已经克隆过仓库,只需拉取 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 # 推送更新到远程