一个开源的分布式版本控制系统
二次整理自网络教程。
一.基础概念
1.工作区域
workspace: 工作区,电脑上当前可见的目录。
Index/Stage:
暂存区,临时存放变动。实际上是一个文件,保存即将提交到文件列表的信息。位于.git/index。
Repository:
版本库,即.git。其中HEAD指向最新放入版本库的版本。
Remote: 远程仓库,托管代码的服务器。
2.文件状态
GIT不关心文件两个版本之间的具体差别,而是关心文件的整体是否有改变,若文件被改变,在添加提交时就生成文件新版本的快照,而判断文件整体是否改变的方法就是用SHA-1算法计算文件的校验和。
Untracked:
文件未跟踪,位于工作区。没有加入到暂存区,不参与版本控制。通过git add
变为Staged。
Unmodify:
文件位于版本库,未修改。即版本库中的文件快照内容与工作区中完全一致。
这种文件有两个去处,如果它被修改,变为Modified;如果使用git
rm移出版本库,则成为Untracked文件。
Modified:
文件已修改,位于工作区。这种文件有两个去处,通过git
add可进入暂存staged状态;使用git checkout
则丢弃修改,返回unmodify或staged。
Staged: 文件位于暂存区。执行git
commit则将修改同步到版本中。执行git reset HEAD
filename取消暂存,文件状态为Modified。
二.命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| git init <dir> git clone --recursive <url>
git status <file>
git add <file> git restore <file>
git rm <file>
git rm --cached <file> git restore --staged <file>
git checkout . git checkout -- <file> git checkout HEAD . git checkout HEAD <file>
git commit -m "备注"
git reset HEAD <file>
git submodule sync --recursive git submodule update --init --recursive
|
1 2 3 4 5 6 7
| git checkout --orphan lastest git add . git commit -m "first commit" git branch -d main git branch -m main git push -f --set-upstream origin main
|
1 2 3 4 5 6 7
|
git filter-branch --force --index-filter \ "git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA" \ --prune-empty --tag-name-filter cat -- --all
git push origin --force --all
|
1 2 3 4 5 6 7 8 9
| git commit --amend
git rebase -i HEAD
git reset HEAD
|
1 2 3 4
| git lfs install
git lfs ls-files
|
推荐一个动画演示的在线练习网站
参考
Git
工作区、暂存区和版本库
【Git】---工作区、暂存区、版本库、远程仓库
关于.gitignore怎么保留子目录的子目录这件事
- ViKyanite - 博客园