Git
学习后的记录
git cherry-pick C1
git tag v1 C2
git branch -f bname C3
git checkout HEAD~2^3~
git pull
==git fetch; git merge o/master
git pull --rebase
==git fetch; git rebase
git push
==git push origin master:master
git push -u origin master
!!! 非常好的文档
操作
配置
- /etc/gitconfig
- ~/.gitconfig
- .git/config
重要概念
- 工作目录(working directory,工作副本):代码目录
- 版本库(repository):代码目录下的.git目录
- 缓存区(Stage,或者Index):
- 暂存区:
git stash
初始化
1 | git config --list |
开发分支
1 | git branch # 查看分支 |
真正理解 git fetch, git pull 以及 FETCH_HEAD
理解reset和revert
git checkout
转到指定分区git fetch
从远程repo中获取最新提交的代码,并把对应commit-id记录到.git/FETCH_HEAD文件中- FETCH_HEAD:是一个版本链接,记录在本地的一个文件中,指向着目前已经从远程仓库取下来的分支的末端版本。
git pull
=git fetch
+git merge
git reset
版本回退,会导致回退目标版本之后的代码丢失(需要确认你的确不再需要它们)git log
确认commit itgit reset -hard
回退到目标版本git push -f
强制提交到远端
git revert
反做,会产生新的版本,只是这个版本的内容和目标版本内容一致git reset HEAD~2
git stash
藏匿处,修改、新增的代码,未提交,要转到其它分区,为了避免带到其它分区,可以用这个命令藏匿起来
暂存 stash
在有代码变动,但还不想要commit的时候,可以暂存。
1 | git status #有变动 |
git cherry-pick
对单个commit操作,把某个commit(可以是其它分支的)合并到当前分支
git cherry-pick <commit id>
解决冲突:
- 方法也和普通的一样,手工检查。
- 执行add命令
- 执行commit命令,提交即可
回滚
放弃本地的commit,使用仓库代码
1 | git checkout master |
代码还没有commit
未使用 git add 缓存代码时。
git checkout -- filename
取消对文件的修改,还原到最近的版本
未使用 git add 缓存代码时。- 另一种方法
git reset HEAD filepathname
已经commit但还没有push
git reset --hard HEAD^
回退到上一次commit的状态。git reset --hard origin/master
#将本地的状态回退到和远程的一样git reset HEAD~3
当前分支相当于回滚了3个提交点reset有3种常用的模式:
- –soft,只改变提交点,暂存区和工作目录的内容都不改变
- –mixed,改变提交点,同时改变暂存区的内容。这是默认的回滚方式
- –hard,暂存区、工作目录的内容都会被修改到与提交点完全一致的状态
git revert HEAD
# 回到前一次 commit 的狀態git revert HEAD^
# 回到前前一次 commit 的狀態
已经push
https://blog.csdn.net/hao134838/article/details/78438933
git reset --hard HEAD~2
git push -f
修改commit log
https://xiewenbo.iteye.com/blog/1285693
git commit --amend
Tag
1 | git tag -a 0.2 -m "Release version 0.2" # 创建 tag |
导出
1 | git archive v0.1 | gzip > site.tgz |
转库
1 | git remote set-url origin git@github.com:***/***.git |
其它
如果是clone无提交权限的,然后要转为有权限的,需要
git statusgit remote rm origin
git statusgit remote add origin
git statusgit remote add origin git@github.com:hadoop-deployer/hadoop-deployer.git
git statusgit push origin
管理空文件夹
- 在要被管理的空目录下创建.gitignore文件。
- 在.gitignore文件内写入如下代码。第一行忽略所有文件。第二行除了.gitignore文件不被忽略。
*
!.gitignore
原理图解
目录
.
|-- HEAD # 这个git项目当前处在哪个分支里(当前指针)
|-- config # 项目的配置信息,git config命令会改动它
|-- description # 项目的描述信息
|-- hooks/ # 系统默认钩子脚本目录
|-- index # 索引文件
|-- logs/ # 各个refs的历史信息
|-- objects/ # Git本地仓库的所有对象 (commits, trees, blobs, tags)
`-- refs/ # 标识你项目里的每个分支指向了哪个提交(commit)。
- HEAD
当前分支版本的指针,指向当前分支你最近的一个提交。当chechout时,此指向会变。
*当为master分支时,文件内容为:ref: refs/heads/master
*当为test分支时,内容为:ref: refs/heads/test - index
暂存区,即将被下一次提交的文件集合 - refs
- refs/heads/master : 文件内容是一个commit
- refs/heads/test
- refs/remotes/master
- refs/tags
- objects
操作和状态和目录
由 project/.git/config 可知: (若有更多, 亦可由此得知)
origin(remote) 是 Repository 的版本
master(branch) 是 local 端, 正在修改的版本
平常沒事不要去動到 origin, 如果動到, 可用 git reset –hard 回覆到沒修改的狀態.
git reset HEAD filename # 從 staging area 狀態回到 unstaging 或 untracked (檔案內容並不會改變)
git checkout filename # 從 unstaging 狀態回到最初 Repository 的檔案(檔案內容變回修改前)
文件状态 | 工作区域 | 操作 |
---|---|---|
未跟踪 | new file | |
已修改、未修改 | 本地:工作目录 | git add |
已暂存 | 本地:暂存区 | git stash |
已提交 | 本地:本地仓库 | git commit |
已提交 | 远程:远程仓库 | git push |
操作和状态
HEAD:当期分支,当前分支head指向的commit
index:当前分支被跟踪的文件
working copy:可以理解为项目的文件
git add
git会暂存这个文件到indexgit commit
git会新建一个commit,随后HEAD就指向这个新的commit。- HEAD文件指向不变 ref/heads/master
- 被指向的文件的内容,master,改变,从一个cmomit Id 变为另一个commit Id
git reset
git会在一个分支内把HEAD指向另一个commit。HEAD指向后移。- -soft参数:git仅重置HEAD到另一个commit
- -mixed参数:重置HEAD到另一个commit,并且重置index以便和HEAD相匹配
- -hard参数:重置HEAD到另一个commit,并且重置index以便和HEAD相匹配,并且重置working copy也使得其完全匹配起来。(因为working copy就是项目文件,也就是这个命令会覆盖现有文件内容)
git revrt
git使用一个新的commit来回滚之前的commit。HEAD继续向前。git checkout
git会把HEAD指向另一个分支的commitgit stash
工作目录 -> 暂存区。注意,这个暂存区真的只是暂存区,用于避免在切换分支是,暂存一些不想要commit的变动。
安装 git/gogs
1 | yum install -y git |
简单 安装git服务
使用二进制安装,安装使用git用户
1 | #gogs |
问题处理
如果提交文件过大,会显示413错误码,是因为nginx的限定。
在server级别配置client_max_body_size 200m;
后重载配置就好
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 jaytp@qq.com