Version Control (Git)
git init创建仓库
1 | git init |
git help 查看帮助,后面要加上参数,比如说git init
我们创建一个文件。
1 | echo "hello world" > hello.txt |
这个时候查看 git status
1 | No commits yet |
我们可以看到一个`Untracked files 。
然后git add hello.txt
1 | git status |
输入 git commit 我们可以看到commit message for your changes
\image-20220330150554475.png)
然后我们可以在最上方输入git commit 的提交信息。
以下连接可以对编写提交信息有所帮助:
1 | [master (root-commit) c67b17d] Add hello.txt` |
然后就提示了相关信息。
1 | git log |
以上信息可以查看commit history
我们可以用 git cat-file -p 来查看 commit 的相关内容。
例如上述提交我们得到的hash值是 c67b17d
1 | git cat-file -p c67b17d |
我们可以得到相关信息。
我们再对 68aba62e560c0ebc3396e8ae9335232cd93a3f60 进行git cat-file -p ,可以查看更详细的信息。
1 | git cat-file -p 68aba62e560c0ebc3396e8ae9335232cd93a3f60 |
我们再对 3b18e512dba79e4c8300dd08aeb37f8e728b8dad 进行git cat-file -p ,可以查看文件内容。
1 | git cat-file -p 3b18e512dba79e4c8300dd08aeb37f8e728b8dad |
git log 展示的信息非常的抽象不易于查看,我们可以通过以下命令,进行图形化的查看
1 | git log --all --graph --decorate |
很遗憾由于我们的提交只有一次,所以和之前没什么区别。
我们新添加一些内容。
\image-20220330165942312.png)
再次输入以下信息:
1 | git log --all --graph --decorate |
\image-20220330170052069.png)
我们可以查看图形化的提交结果。
我们可以通过 git checkout 改变当前仓库的状态。
例如:
1 | git checkout c67b17d1 |
此时我们再查看当前的文件,就可以发现文件内容为第一次提交时的内容。
1 | cat hello.txt |
\image-20220330171952070.png)
HEAD 指针也移到了第一个状态。
1 | git checkout master |
git checkout master 可以使用别名回到最新的状态。
git diff可以查看文件和当前状态文件的差别,加上hash码可以查看和指定文件的差别。
1 | git diff hello.txt |
\image-20220330173517557.png)
1 | git diff c67b17d1 hello.txt |
\image-20220330173628255.png)
git checkout <文件> 会丢弃文件中修改的内容,然后将文件的内容变为HEAD指针所指向的内容
git branch 可以查看当前有哪些分支。--vv参数可以显示更多的信息。
git branch <分支名> 可以新建分支。
1 | git branch cat |
\image-20220330182825930.png)
可以看到新建了一个分支cat。
1 | git checkout cat |
将 HEAD 指针指向cat分支
\image-20220330183109402.png)
做一些修改然后提交
\image-20220330183702033.png)
可以看到cat分支往前走了一个节点。
1 | git log --all --graph --decorate --oneline |
\image-20220330184446862.png)
我们继续创建分支,可以看到现在已经有两个分支。
\image-20220330185418461.png)
我们接下来对两个分支进行合并。
1 | git checkout master |
merge cat的时候一切正常,merge dog的时候出现冲突。
我们编辑文件,可以看到冲突部分如下:
\image-20220330190706456.png)
修改如下:
\image-20220330191534744.png)
然后就可以正常进行merge
\image-20220330191655673.png)
可以看到完成了合并。
\image-20220330191801124.png)
远端操作
git remote: 列出远端git remote add <name> <url>: 添加一个远端这里的name是远程仓库的名字,一般都是
origin,这里的url可以是本地地址,比如说../remote需要注意的是远程仓库的创建要用
git init --bare1
git add origin ../remote
git push <remote> <local branch>:<remote branch>: 将对象传送至远端并更新远端引用1
git push origin master:master
/image-20220330195829301.png)
之后
git log就可以看到远程仓库的状态
git branch --set-upstream-to=<remote>/<remote branch>: 创建本地和远端分支的关联关系例如 git branch —set-upstream-to=origin/master
以后就可以直接
git push了用
git branch -vv可以看到当前分支绑定了哪个远端分支/image-20220330204316997.png)
git fetch: 从远端获取对象/索引- 给i他
git pull: 相当于git fetch; git merge git clone: 从远端下载仓库
Git 高级操作
git config: Git 是一个 高度可定制的 工具git clone --depth=1: 浅克隆(shallow clone),不包括完整的版本历史信息如果版本历史信息过大,可以使用这个命令,也可以直接 git clone —shallow
git add -p: 交互式暂存这个命令可以保留一些你想要的更改,忽略一些你不需要的更改(比如debug信息)。
git rebase -i: 交互式变基git blame: 查看最后修改某行的人后面加文件名。出来的信息前面会有hash值,git show hash值可以查看详细信息。
git stash: 暂时移除工作目录下的修改内容git stash pop可以取消撤销git bisect: 通过二分查找搜索历史记录.gitignore: 指定 故意不追踪的文件