Git小记

145 阅读2分钟

版本回退

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://gitgit 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

image.png

检出远端分支

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

image.png

开发使用思路

方案一

www.cnblogs.com/jeffery-zou…

  1. 检出远端开发分支到本地开发分支
  2. 创建本地个人分支进行开发
  3. 分支 push 到远端提PR 合并

方案二 gerrit

  1. 同步开发分支代码进行开发
  2. 开发完推送到开发分支(但要加分才能合并)
  3. 合并完开发,将自己的多笔提交 cherrypick 到主干,rebase 成为一笔提交,推送到主干,加分后合并。

其他

revert

git revert commitid // 撤销某次修改 但是带有 commit 记录

rebase 和 merge的区别

  • rebase不会产生合并的提交,而是从相同提交点『变基』,将其他分支的提交都转移过来。
  • merge 过来则会产生一个新的 commit 点。