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 --bare
1
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
: 指定 故意不追踪的文件