版本回退
1.Untracked file
(工作区修改未加暂存区)
git clean -df
2. not add yet
git checkout -- file // 撤销工作区改动
2. add not commit yet
git reset [file] // 撤销add操作
git reset HEAD add.txt // 同理
git checkout .
git restore --staged [file]
3. 已经commit
git reset --hard HEAD^ // 会重置暂存区
git reset --soft HEAD^ // 回退且修改放入暂存区
git reset --mixed HEAD^ // 回退回工作区
追加提交
git commit --amend
整理提交 git rebase
git rebase -i HEAR~2 // 整理最近两笔提交
暂存修改
#暂存本地修改
git stash save "别名"
#查看暂存的信息
git stash list
#应用最近一次暂存的内容
git stash pop [index]
#应用指定版本的暂存内容
git stash apply stash@{1}
#清空暂存栈 git stash clear
关联远端仓库
// 1. 创建远端的本地名字
git remote add [自定义远端的名字] ssh://git
如 git remote add github ssh://git
// 2. 推送main 到远端 github,-u 表示关联main和远端
git push -u github main
// 3. others
git pull github main --allow-unrelated-histories
git push github main
参考.git/config
检出远端分支
git checkout -b develop origin/develop
创建远端分支
git checkout -b dev // 创建并切换到dev 分支
git push github dev:dev // 推送本地的 dev 分支到远程的 dev 分支 【本地分支dev:远程分支 dev】
解决冲突
场景
我基于老版本开发提交后提示无法合入,同事已经开发到新的版本
# 同步新的代码
repo sync -j32
# 从远端我的仓库cherry-pick我的提交
# git fetch相当于下载一笔提交到本地 FETCH_HEAD
git fetch [我的提交] && git cherry-pick FETCH_HEAD
# git status
逐个解决冲突
# git cherry-pick --continue
# 注 git pull github [远程分支名:本地分支名]
相当于 git fetch 下载后 merge
开发使用思路
方案一
- 检出远端开发分支到本地开发分支
- 创建本地个人分支进行开发
- 分支 push 到远端提PR 合并
方案二 gerrit
- 同步开发分支代码进行开发
- 开发完推送到开发分支(但要加分才能合并)
- 合并完开发,将自己的多笔提交 cherrypick 到主干,rebase 成为一笔提交,推送到主干,加分后合并。
其他
revert
git revert commitid // 撤销某次修改 但是带有 commit 记录
rebase 和 merge的区别
- rebase不会产生合并的提交,而是从相同提交点『变基』,将其他分支的提交都转移过来。
- merge 过来则会产生一个新的 commit 点。