分布式版本控制系统,适合个人、中小企业使用。
Installation
Usage
基本配置
配置git 的用户名和邮箱:
git config --global user.name "dionysen" git config --global user.email "solongnight@outlook.com"
|
新建一个仓库
Initiate git repository on the local:
or set the file path:
A repository was created, but it is empty.
You can add some files to the repository:
git add [filename] // e.g. "git add ."
|
Then you add this files to the stages and you need to commit this to the repository.
git commit -a -m "Changed some files"
|
-a
does not commit any new files.
-m
means that you should give the commit message.
Add a remote repository:
git remote add origin git@gitee.com:sential/source.git
|
Push the local repository to the remote repository:
- 若要在一个新的设备上使用远程仓库,首先将此仓库克隆到本地:
git clone git@gitee.com:sential/source.git
|
添加个人公钥
然后按照 gitee
上的提示添加个人公钥:
ssh-keygen -t ed25519 -C "xxxxx@xxxxx.com"
cat ~/.ssh/id_ed25519.pub
ssh -T git@gitee.com
|
与远程仓库同步
每次编辑时要执行。
git pull origin master
git add . git commit -a -m "Changed some files" git push origin master
|
或者每次编辑完成后,在另一处pull
一次,那样不用每次编辑前都要再拉去一下了。
写两个脚本自动拉取和提交。
- 当没有拉取最新版本的远程仓库同时又修改了本地仓库时,拉取会提示错误,需要选择合并或者放弃某一端,如果放弃本地仓库,执行以下命令:
git reset --hard git pull origin master
|
分支切换
查看分支:
新建分支:
git checkout -b linux origin/linux
git add . git commit -a -m "Changed some files" git push --set-upstream origin origin/linux
|
之后即可正常使用,切换分支使用命令:
不修改.gitignore
的情况下忽略本地修改
如想忽略项目文件夹下的.vscode
中的settings.json
git update-index --skip-worktree .vscode/settings.json
|
如果时间久了,忘了哪些文件被忽略了,那么可以通过 git ls-files -v
来查看,其结果中第一列打 S
标记的项目就是被忽略(Skip-worktree)的项目(关于符号的更多说明可以参考官方文档)。我们可以通过 grep
或是 PowerShell 中的 Select-String
来将这些项目过滤出来。
git ls-files -v | grep -E -i .vscode/settings.json
|
powershell:
git ls-files -v | Select-String -Pattern .vscode/settings.json
|
如何拉取远程分支出现冲突,可能需要恢复忽略,解决冲突:
git update-index --no-skip-worktree .vscode/settings.json
|
查看仓库状态
差异比较
- 显示出branch1和branch2中差异的部分
git diff branch1 branch2 --stat
|
- 显示指定文件的详细差异
git diff branch1 branch2 具体文件路径
|
- 显示出所有有差异的文件的详细差异
- 查看branch1分支有,而branch2中没有的log
- 查看branch2中比branch1中多提交了哪些内容
注意,列出来的是两个点后边(此处即dev)多提交的内容。
- 不知道谁提交的多谁提交的少,单纯想知道有是吗不一样
git log branch1...branch2
|
- 在上述情况下,在显示出没个提交是在哪个分支上
git log --lefg-right branch1...branch2
|
注意 commit 后面的箭头,根据我们在 –left-right branch1…branch2 的顺序,左箭头 < 表示是 branch1 的,右箭头 > 表示是branch2的。
子模块管理
添加子模块:
git submodule add <URL-to-module1> devices/module1
|
Git会自动为子模块创建一个独立的目录,并从远程仓库中克隆子模块的代码到这个目录中。
一般情况要在子模块中对子模块进行操作,如修改后提交和推送。
确保子模块是最新的:
git submodule update --remote
|
子模块处理好之后,父模块在提交和推送时会包含子模块的改动。
- 远程删除分支后,本地可能还会保留记录,使用如下命令与远程同步