Git

Git整理

结合项目整理一下Git,很多都忘了

Posted by Deavan on May 26, 2023

git config

$ git config --global user.name dgzhao
$ git config --global user.email dgzhao@example.com
$ git config --global core.autocrlf input //防止出现windows回车换行符问题
$ git config --global color.branch auto
$ git config --global color.diff auto
$ git config --global color.interactive auto
$ git config --global color.status auto

git diff

  • git diff 查看尚未暂存的文件更新了哪些部分
  • git diff –staged 查看尚已暂存的文件更新了哪些部分

  • git status 查看文件处于什么状态

git log

  • git log:查看全部log,会分页加载

  • git log -p -2 :显示最近两次提交的内容差异log

  • git log –stat:看到每次提交的简略的统计信息

  • git log –since=2.weeks:查看最近两周的log

  • git log -Sfunction_name:可以列出那些添加或移除了某些字符串的提交,找出添加或移除了某一个特定函数的引用的提交

git checkout

  • git checkout 撤销file文件的修改
  • git checkout * 撤销所有文件的修改,危险!

  • git checkout -b branchname 新建分支,是git branch 和 git checkout 的缩写

git branch

git reset 撤销commit

git reset –mixed 此模式为默认模式,等价于git reset, 保留指定版本的代码,即回退到文件修改状态或未添加状态 git reset --soft 回退到某个版本,只回退了commit的信息,即回退到文件暂存区状态 git reset --hard 彻底回退到某个版本,本地的源码也会变为上指定版本的内容

git pull vs git pull –rebase

尽量用后者,因为可以减少无用的merge commit

解决冲突

1、确定当前分支状态 当发生冲突时,及使用git pull –rebase, 会进入到临时的 rebase 状态(是一个特殊的节点状态),可使用 git status 或者 git branch 命令确定当前分支状态。

2、修改冲突 推荐使用 vim 修改冲突,使用 vim /«««< 命令定位冲突代码行,修改冲突。

3、标记冲突解决 使用 git add xxx 命令标记冲突解决,使用 git status 命令查看确定冲突状态是否解决。

4、rebase 继续 解决完某 commit 冲突后,使用 git rebase –continue 命令继续 rebase 操作,如果遇到冲突再重复以上步骤,逐步解决所有冲突,直到 rebase 操作继续,回到原分支。

5、如果发生意外 如果发生意外操作,使用 git rebase –abort命令放弃本次 rebase 操作,之后 使用 git pull –rebase 命令重新操作。

具体情景

实习常碰到的几个场景,总结一下。

1、 新需求

git checkout master
git pull
sh podsCache.sh // 更新pods
git checkout -b feature/deavan_XXX
git add file   // 用SourceTree方便一些,如果缺人全都加的话gaa
git commit -m "描述一下改动 -m "story==xxxxxxxx" // 绑定tapid
git push
// git push 这里如果需要在最新的的master上应用可以替换为下面的rebase
git fetch origin
git rebase origin/master
git push -f

2、 浓缩多条commit

git rebase -i HEAD~n  // n就是最近的几条commit
然后会进入到vim,这里n记得是被干掉的数量,也就是如果本地有3条没有push的commit,那么n应该是2.

3、 应用某条分支到当前分支

找到目标分支的commit hash,
git cherry-pick <commit hash>
如果有冲突的话,可以用VScode打开,处理方便一些
git cherry-pick --continue

4、拉取远程分支到本地

git checkout -b <local-branch-name> <remote-branch-name>

5、切换git账号并在本地新建仓库

有时候同时做多个需求,本地多个仓库会方便一些

5.1 切换git账号

先新建个本地仓库
git init
不要加 -- global,仅用在这一个仓库
git config user.name deavanwang
git config user.email xxx@tencent.com
git clone https://git.woa.com/QQNews_iOS/QQNews.git

// 测试当前git账号
git user.name

// 查看git信息
git config --list