Git

git下载

https://git-scm.com/downloads

git别名alias配置

Windows上配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 用户目录下
[alias]
a = add
ckt = checkout
cktb = checkout -b
cm = commit -m
ca = commit -a
ss = status
pl = pull
ps = push
l = log
br = branch
reb = rebase
mg = merge

Mac上的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
alias gs="git status"
alias gcc="git checkout"
alias gccb="git checkout -b"
alias gl="git log"
alias glo="git log --online --graph"
alias gb="git branch"
alias gba="git branch -a"
alias gac="git add . && git commit -m"
alias ga="git add ."
alias gpl="git pull --rebase"
alias gpf="git push --force"
alias gcl="git clone"
alias gp="git push"
alias gst="git stash"
alias grb="git rebase"

ssh获取

  1. ssh -T git@github.com 检测是否配置成功了
  2. ssh-keygen -C “Your primary GitHub email address” 生成使用
  3. 当你在github上配置正确的时候 再次重复1过程看到下面这句话说明已经成功了。
    Hi Aspire01! You’ve successfully authenticated, but g
    does not provide shell access.

git 代码合并

  • merge
    • fast-forward
      eg. git merge test 当待合并的分支在当前分支的下游时,会发生快速合并 相当于直接移动指针
    • no-ff
      eg. git merge -no-ff test 会在当前合并的分支新建一个提交节点 从而完成合并
    • squash 将一个分支中的所有更改压缩成一个提交,并将其合并到另一个分支中。这种方式会创建一个新的合并提交,但只包含一个提交的更改。 svn就采用此种方式 与no-ff 非常相似 区别是不会保留对合如分支的引用
      eg. 1. master 2. feature 当前处于master分支 通过squash执行合并操作 git merge –squash feature
  • rebase
    这种方式会将一个分支的更改放在另一个分支的顶部,看起来像是它们是按顺序提交的。这种方式不会创建新的合并提交
    • git rebase 在分支合并代码 保持主干为完美线性
    • 让本地的多个提交合并为一个 简化提交记录
      • git rebase -i HEAD~3
      • pick : 代表合并后的提交用这个提交的注释;
      • s : squash命令的简写,代表合并提交中包含这个提交;
      • d : 代表合并提交中排除这个提交

git cherry-pick

http://www.ruanyifeng.com/blog/2020/04/git-cherry-pick.html

git stash

stash命令保存当前工作进度,会把暂存区和工作区的改动保存起来

常用命令:

  • git stash save: 可以用于存储修改 并且将git的工作状态切回到上次的一次合法提交上
  • git stash list:显示保存进度的列表
  • git stash pop:栈顶的内容会恢复到工作区 也可指定哪个名字
  • git stash show:查看堆栈中最新保存的stash和当前目录的差异
  • git stash drop:加上名称则是可以移除某个指定的stash
  • git stash clear:删除所有的存储的进度

应用场景:

  1. 当你的开发进行到一半,但是代码还不想进行提交 ,然后需要同步去关联远端代码时.如果你本地的代码和远端代码没有冲突时,可以直接通过git pull解决,否则使用如下
    git stash
    git pull
    git stash pop

  2. 或者当你开发到一半,现在要修改别的分支问题的时候,你也可以使用git stash缓存 当前区域的代码
    git stash:保存开发到一半的代码
    git commit -m ‘修改问题’
    git stash pop:将代码追加到最新的提交之后

参考:https://mp.weixin.qq.com/s/62YQORpsGCmKV4ydE2yTFw

git tag?

https://zhuanlan.zhihu.com/p/87725726

git其他操作命令

git常用命令

  • git init — 初始化一个git仓库

  • git config –system –unset credential.helper

  • git clone 地址 — 可以在github上下载项目

  • git clone -b feature git地址 — 拉取仓库的特定分支

  • git branch ** — 创建分支

  • git branch -m ‘xxxx’ — 修改分支名称

  • git checkout ** —切换分支

  • git branch -d dev(测试分支) —删除本地分支 远程删除了分支 本地仍然存在 git pull操作了也不行

  • git push origin –delete dev —删除远程分支

  • git checkout -b feature-branch origin/feature-branch — 检出远程的feature-branch分支到本地

  • git branch –set-upstream-to=origin/dev — dev为本地的分支

  • git add test.java —这是将工作区的文件添加到暂存区中

  • git commit -m ‘描述’ — 这是将暂存区的文件提交到本地仓库中

  • git commit –amend -m “新的修改提交信息” — 修改最后一次提交的信息

  • git remote add origin xxx —添加远程仓库地址 只能添加一个

  • git remote rm origin — 移除远程仓库地址

  • git push — 本地文件同步到远程仓库

  • git clean -d -fx — 清除没有添加到工作区的文件

  • git reset –hard HEAD^ — 代码回滚到上个版本

  • git reset –hard versionId(版本id 可在仓库中查看到)

  • git reset –soft versionId 与–hard不同的是,hard会丢失versionId后的提交代码,–soft则会将代码放到暂存区

  • git reset –hard origin/master — 代码回到指定的某个版本

Tips

git迁移并保留历史提交记录?

  1. git remote -v 查看远程仓库情况
  2. git remote add xxx(origin-name) xxx(新的远程仓库地址)
  3. git push xxx(origin-name) –all –force 同步所有老仓库的分支信息给新仓库 第一次可以直接使用–force
  4. 补充:git push xxx(origin-name) dev:develop 提交老仓库的dev分支信息到新仓库的develop分支

本地分支和远端分支不一样的情况?

  • git remote update origin –prune

当在.gitignore中添加忽略文件的时候,却发现不起效果怎么办?

  • 当存在添加却不起效果的时候,很有可能当前文件或者文件夹内容已被git管理,而忽略中只能忽略未被添加到git管理的文件
  • git rm -r –cached .swc(eg.) 执行此命令,删除当前文件可解决

问题记录