git用法
网站链接:learngitbranching
这是一个网页版的小游戏,可以帮助学习使用 Git 命令,了解 Git 的工作机制,有很多关卡,全面学习使用 Git 命令。
git-config
1. 配置命令:
git config --global user.name "xxx"
git config --global user.email xxxxxxxxxx@163.com
git config --global http.postBuffer 2M # 最大上传文件的大小
git config --global color.ui true
2. 查看配置:
git config --list
cat ~/.gitconfig # 查看配置文件
3. 直接修改配置文件
vim ~/.gitconfig
配置文件内容如下:
[user]
email = 19805159366@163.com
name = SEUZTh
[https]
[http]
postBuffer = 2M
4. 删除配置
git config unset --global user.name
git-init
1. 初始化
• 使用当前目录作为Git仓库,我们只需使它初始化。
git init
该命令执行完后会在当前目录生成一个 .git 目录。
• 使用我们指定目录作为Git仓库。
git init newrepo
2. 查看生成的.git目录
cd .git
ls
除了config这个文件,.git的作用就是存储项目级别的配置信息。
git-commit
1. 显示工作目录和暂存区的状态
git status
2. 提交目录下所有文件
git add .
3. 提交指定文件
git add xxx.格式
4. 添加说明
git commit -m '说明'
5. 查看历史提交
git log
git-diff
1. 查看修改前后的区别
git-diff
加号表示添加的内容,减号表示删除的内容。
即使是修改某一行,也会显示删除和添加。
2. 查看暂存区和Reportory的区别
git diff --staged
git-rename
1. 查看状态
给文件重命名后查看git status会显示删除了一个文件,有一个文件未被跟踪
2. 告诉git,删除了某文件
git rm xxx.格式
3. 添加重命名后的文件
git add xxx.格式
git-mv
1. 重命名文件
git mv 旧文件.格式 新文件.格式
2. 移动文件或目录
git不会跟踪空白目录,新建目录后,查看状态时不会提示有新文件夹。
git mv xxx.格式 新文件夹/
git mv 旧文件夹 新文件夹/
查看状态时会提示重名了,新文件名包含文件路径。
git-rm
1. 删除文件
git rm xxx.格式
git-head
1. 恢复文件
git checkout HEAD -- xxx.格式 # HEAD代表最近的一次提交,--表示当前分支
2. 提交删除后恢复文件
如果是rm删除后并commit提交后,工作目录变成干净的,此时想要恢复的话,需要恢复到最近一次的上一次提交
git checkout HEAD^ -- xxx.格式 # ^表示上一次提交,两个^^上上次
git-revert
2. 还原某次提交
只查看有id号的一行
git log --oneline
git revert id号
git-reset
1. soft
不会影响到工作区和暂存区的东西。
git log --oneline
git reset --soft id号 # 将指针指向id这次提交
再次commit提交,会覆盖掉id号后面的提交。
2. mixed
把工作区和暂存区直接重置到一个提交的状态。
git reset --mixed id号
会发现暂存区中的东西不见了,需要git add添加并commit提交。
3. hard
会把暂存区的东西重置到指定的提交状态,并把指针指向这个提交
git reset --hard id1
会发现工作目录干净了。
git-branch
1. 查看项目所有的分支
git branch
“*”星号表示当前分支的位置。
2. 创建新分支
git branch xxx
3. 切换分支
git checkout xxx
4. 查看当前分支
git branch
git-checkout
1. 查看提交历史(显示是哪个分支上的)
git log --oneline --decorate
2. 切换到主分支
git checkout master
此时查看历史只能查看master分支上的提交。
3. 查看所有分支的历史提交
git log --oneline --decorate --all
git-branch-diff
1. 查看两个分支的区别
git diff master..某某某
2. 查看两个分支的同一文件的区别
git diff master..某分支 某文件
git-fast-forward
1. 合并某分支到master
git merge 某分支
这是一个Fast-forward,不会是一个新的提交,查看历史提交,会显示最后一次是在分支上进行的提交。
git diff master..某分支 对比后没有区别。
git-merge
1. 切换分支
git checkout 某分支
git branch # 查看当前分支
2. 快捷提交
git commit -am '说明'
git log --oneline # 查看历史提交
3. master和某分支均已修改的情况下合并
不能再使用Fast-forward。
git log --oneline --decorate --all -19 --graph # 查看10条,所有分支的历史提交
git branch # 查看当前所在分支
git merge 某分支
输入合并提交的描述(可保持默认)
再次查看:
git log --oneline --decorate --all -19 --graph # 查看10条,所有分支的历史提交
git-conflict
1. 合并分支时出现冲突
将master合并到某分支时
git merge master
提示CONFLICT (content): Merge conflict in xxx.
到该文件中,git已经给标出冲突的内容,删掉我们不需要的,留下需要的即可:
<<<<<<< HEAD
内容
=======
内容
>>>>>>> master
接下来提交:
git add.
git commit # 这里可以不用写描述信息
把弹出的内容中Conflicts那几行代码删除,保存退出,即合并成功,查看一下日志:
git log --oneline --decorate --all --graph
rm-branch
1. 给分支重命名
git branch -m 已经存在的分支 新名字
2. 删除分支
git branch -d 某分支
stash
1.保存工作进度
查看状态:
git status
看到有已经修改过的,但想修改其他的提交,并不想提交它,就保存当前进度:
git stash save '修改了某某文件'
git status # 目录是干净的
2. 查看保存的工作进度的列表
git stash list
3. 对比工作进度和现在目录的区别
git stash show -p stash@{代号} # 代号使用git stash list查看
4. 恢复工作进度
git stash apply stash@{代号}
5. 删除工作进度
git stash drop stash@{0}
6. 恢复工作进度时直接删除工作进度
git stash pop stash@{代号}
log
1. 查看历史
git log1
默认显示全部提交日志。
f 键向下翻页,b键 向上翻页,q 键退出显示。
2. 显示简单的日志列表
git log --oneline
git log --oneline -行数
git log --oneline --author="作者"
3. 显示指定内容的提交
“内容”为说明中所写到的。
git log --oneline --grep='内容'
4. 显示指定日期的提交
git log --oneline --before='2021-08-03' # 2021.08.03之前的提交
git log --oneline --before='1 week' # 1周之前的提交
git log --oneline --before='3 days' # 3天之前的提交
5. 图形效果
git log --oneline --graph
6. 查看log详细使用手册
git help log
alias
1. 给常用命令添加别名
给checkout设置别名为alias:
git config --global alias.co checkout
查看配置:
cat ~/.gitconfig
2. 给命令行命令设置别名
vi ~/.bashrc
给“git checkout”设置别名,修改配置文件:
alias gco='git checkout'
sourch一下生效:
source ~/.bashrc1
ignore
让Git忽略某个文件:
git config --global core.excludesfile ~/.gitignore_global
vi ~/.gitignore_global
输入文件名。以后就会自动忽略这个文件。
ls -la #查看以.开头的文件
gitignore
1. 在项目根目录下指定需要忽略的文件
vi .gitignore
比如想忽略所有扩展名为“.log”的文件,输入:
*.log
保存退出。
提交:
git add.
git commit -m '添加了 .gitignore 文件'
Git 配置 socks5 代理
其中 port 根据代理给定的端口号进行设置:
git config --global http.proxy 'socks5://127.0.0.1:port'
git config --global https.proxy 'socks5://127.0.0.1:port'
如果你有代理可以这样使用,没有代理就只能看自己的网络是否能顺利访问 Github 了。
第一次 push 代码的步骤
git init
git add .
git commit -m '说明'
git remote add origin https://xxx.git
git push -u origin main1
Github 团队协作
参考链接:github 多人如何一起开发? - 视觉派Pie的回答 - 知乎
克隆的项目子模块作为新项目文件跟踪
我们经常会从 Github 上下载一些功能包放在自己的文件夹中作为子项目使用,这时,当我们试图将本地的代码 push 到 Github 上时,本地状态现实代码已经全部提交,但是自己的 Github 仓库里只有子项目的空文件夹,这是因为子文件夹下面含有 .git 文件夹,因此导致该子文件夹无法被 Git 跟踪!
先把 .git 这个文件夹删除(该文件夹在 Linux 下为隐藏文件,需要 Ctrl+h 才能现实。
git rm --cached folder # 其中 folder 为子文件夹。
git add folder