Git学习

与SVN的区别

git为分布式相对于svn为集中式,git可以很容易的创建分支,克隆文本代码,离线也可现在本地分支提交修改。

但是git相对于svn要记住很多命令,入门相对复杂。

四度空间

在Git仓库目录下的文件改动(增删改操作)共有如下4个空间来记录/存储,Git命令就是用于将文件改动切换到不同的空间来记录。

  • Workspace:工作区
  • Index / Stage / Cached:暂存区
  • Repository:本地仓库
  • Remote:远程仓库

Git学习_2020-12-01-13-53-26.png

四种状态

对应四度空间,处于这四种空间的文本有着4种状态来标识:

  • Untracked:新增的文件的状态,未受Git管理,记录在工作区
  • Modified:受Git管理过的文件的改动状态(包括改动内容、删除文件),记录在工作区
  • Staged:将记录在工作区的文件变动状态通知了Git,记录在暂存区
  • Unmodified:受Git管理中的文件状态(没有变动),记录在本地仓库/远程仓库

连接

初始化:

git init

添加远程仓库:

git remote add origin “url”

生成公钥:

ssh-keygen -t rsa

cat ~/.ssh/id_rsa.pub 添加到github配置

查看配置列表:

git config –local –list

克隆远程分支:

git clone “url”

文件加入暂存区:

git add

提交到本地分支:

git commit -m “注释”

推送到远程仓库:

git push -u origin master

过滤

touch .gitignore

1
2
3
/project/demo.o       #过滤具体文件demo.o
/project/settings/ #过滤整个settings文件夹
*.o #过滤所有.o文件
  • 以斜杠“/”开头表示目录
  • 以星号“*”通配多个字符
  • 以问号“?”通配单个字符
  • 以方括号“[]”包含单个字符的匹配列表
  • 以叹号“!”表示不忽略(跟踪)匹配到的文件或目录

变动

查看文件改动状态:

git status

查看文件具体改动:

git diff file

查看暂存区的改动:

git diff –cached

查看工作区与本地仓库的改动:

git diff HEAD file

查看历史变更:

git diff commitID1 commitID2

查看本地分支与远程分支的改动

git diff origin/master..master

转移

添加文件到暂存区:

git add file

git add -A /app

git add *

将文件退回工作区:

git rm –cache file

直接删除:

git rm -f file

文件重命名:

git mv fileold filenew

文件移动位置:

git mv [src file] [dir]

提交

将暂存区内容提交:

git commit -m “注释”

追加提交并修改注释:

git commit –amend -m “新注释”

将工作区和暂存区的改动一次提交到本地仓库:

git commit -a -m “注释”

补丁

将本地提交打补丁,可以交由他人继续开发:

git format-patch -1 commitID

git format-patch HEAD~3

应用补丁包:

git am 补丁包名

日志

标准日志:

git log

精简查看:

git log –pretty=oneline

完整查看:

git log -p

工具查看:

gitk

查看本地历史操作:

git reflog

缓存

缓存本地改动:

git stash save -a “add test stash0()”

查看所有缓存:

git stash list

查看缓存细节:

git stash show -p stash@{1}

启动某个缓存:

git stash pop stash@{1}

丢弃某个缓存:

git stash drop stash@{1}

清空缓存:

git stash clear

回退

回退到某个版本,只回退了commit的信息,不会恢复到index file一级:

git reset –-soft

彻底回退到某个版本,本地的源码也会变为上一个版本的内容,撤销的commit中所包含的更改被冲掉:

git reset -–hard

回退到某个版本,回退了commit的信息及暂存区的回退,工作区不回退

git reset –mixed

清理

撤销不能管理到未加入到git的文件,这时需要git clean配合。

git reset –hard

git clean -df

这样可以做到完全清理。

撤销

撤销 某次操作,此次操作之前和之后的commit和history都会保留,并且把这次撤销作为一次最新的提交。

撤销前一次 commit:

git revert HEAD

撤销前前一次 commit:

git revert HEAD^

撤销指定的版本:

git revert commit

分支

查看分支:

git branch

创建分支:

git branch

切换分支:

git checkout 或者git switch

创建+切换分支:

git checkout -b 或者git switch -c

合并某分支到当前分支:

git merge

删除分支:

git branch -d

禁用Fast forward:

git merge –no-ff -m “merge with no-ff” dev

由远程分支创建本地分支:

git checkout -b branch-name origin/branch-name

建立本地分支和远程分支的关联:

git branch –set-upstream branch-name origin/branch-name

git pull/get fetch

git fetch和git pull都可以将远端仓库更新至本地,不过git pull相当于git fetch + git merge。

在本地新建一个temp分支,并将远程origin仓库的master分支代码下载到本地temp分支:

git fetch origin master:tmp

来比较本地代码与刚刚从远程下载下来的代码的区别:

git diff tmp

合并temp分支到本地的master分支:

git merge tmp

如果不想保留temp分支,可以用这步删除:

git branch -d temp

挑拣

在当前分支挑其他分支的 commit,把那部分的变动那过来:

git cherry-pick commit-sha1

支持一次性拿多个:

git cherry-pick master4 master2

支持区间, 区间中间:

git cherry-pick startGitSha1..endGitSha1

  • continue:继续 pick,一般有冲突解决后才需要这样
  • skip:跳过这次进入队列下一次行为
  • abort : 完全放弃 pick,恢复 pick 之前的状态
  • quit: 未冲突的自动变更,冲突的不要,退出这次 pick

变基

整个功能开发完毕的时侯,会有非常多的 commit,用 rebase 可以让我们的commit记录很干净。

带 -i 可以进入交互模式,效果如下:

git rebase -i git-sha1|branch(HEAD)

若是中间毫无冲突,变基则一步到位,否则需要逐步调整

提交变更后继续变基下一步:

git rebase –continue

引起冲突的commits会被丢弃,continue提示没有需要改动的也可以用这个跳过:

git rebase –skip

若是变基改残废了,但是走到一半,可以彻底回滚变基之前的状态:

git rebase –abort

文章目录
  1. 1. 与SVN的区别
  2. 2. 四度空间
  3. 3. 四种状态
  4. 4. 连接
  5. 5. 过滤
  6. 6. 变动
  7. 7. 转移
  8. 8. 提交
  9. 9. 补丁
  10. 10. 日志
  11. 11. 缓存
  12. 12. 回退
  13. 13. 清理
  14. 14. 撤销
  15. 15. 分支
  16. 16. git pull/get fetch
  17. 17. 挑拣
  18. 18. 变基
|