Git 常用操作
Github 初始化仓库后的第一次提交
在网页端创建好了仓库后(暂时先不创建readme),在shell里依次执行
bash
git add .
git commit -m "first commit"
git branch -M main
git remote add origin https://<token>@github.com/<username>/<reponame>.git
git push -u origin main
config 操作
bash
# 屏蔽文件权限的改动
git config --add core.filemode false
# 保存git的用户名和密码
git config --global credential.helper store
Github 设置 Accesstoken
在 Settings/Developer Settings
里找到 token
然后生成一个
在使用 git push
遭到拒绝时(如下)
bash
remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for <url>
应当设置 origin
bash
# 如果原来的 `url` 是
https://github.com/<username>/<project>.git、
git remote add origin https://<token>@github.com/<username>/<project>.git # 设置 origin url
git remote set-url origin https://<token>@github.com/<username>/<project>.git # 更换 origin url
撤销操作
撤销 git add
如果你已经执行了 git add
命令将文件添加到了暂存区(staging area),但还没有进行提交,可以使用 git reset
命令来撤销
bash
# 撤销某个文件的添加操作
git reset <file>
# 撤销所有文件的添加操作
git reset
撤销 git commit
bash
# 撤销 commit,此时需要 commit 才能恢复到未执行命令前的状态
git reset --soft HEAD^
# 撤销 commit 和 add,此时需要先 add 再 commit 才能恢复到未执行命令前的状态
git reset --mixed HEAD^
# 撤销 commit 和 add,并进行 checkout 操作,这将会丢失所有未提交的更改
git reset --hard HEAD^
Git pull
git pull
的默认行为是git fetch
+git merge
git pull --rebase
是git fetch
+git rebase
git fetch
从远程获取最新版本到本地,不会自动合并分支
Git rebase
git rebase
用于把一个分支的修改合并到当前分支。
如果在开发中,开发者A修改了 deploy.sh
文件后,进行了提交,开发者B没有拉取最新的代码,也修改了 deploy.sh
进行了提交,此时提交不允许,因为本地落后远程分支,必须先拉代码才行,报错可能是这样的
bash
Updates were rejected because the remote contains work that you do not have locally
使用 git pull --rebase
与远程代码同步并检查冲突,执行后如果有合并冲突,可以使用以下方案解决
bash
# 撤销 rebase, 回到没有执行 git pull --rebase 的状态
git rebase --abort
# 引起冲突的 commits 会被丢弃, 例子中B开发者的提交会被丢弃
git rebase --skip
# 手动解决冲突之后,用 git add 命令去更新这些内容的索引(index),执行该命令就可以线性的连接本地分支和远程分支
git rebase --continue
暂存区
bash
# 暂存当前内容
git stash
# 查看stash列表
git stash list
# 清空所有stash
git stash clear
# 删除队列中的第一个
git stash drop stash@{0}
更改分支名称
bash
# 切换到要更改的分支
git checkout <branch_name>
# 重命名当前的分支
git branch -m <new_branch_name>
# 如果当前的分支已经推送到远程仓库了,那么需要执行这句话将更改的分支推送到远程仓库
git push origin :<old_branch_name> <new_branch_name>
# 更新本地仓库并追踪新分支的名称,获取最新分支信息并删除不再存在的远程分支
git fetch --all --prune
# 切换到新的分支
git checkout <new_branch_name>
注意事项
- 在更改分支名称前,确保当前处于需要改名的分支上,可以使用
git branch
命令查看当前所在的分支 - 分支名称的更改可能会影响其他成员的工作,所以应该事前同步
- 如果在推送时遇到问题,或许是由于其他团队成员已经更新了远程分支,此时可以使用
git push --force
来强行推送,不过可能会覆盖他人的更改,所以应该事前同步确认 - 更改分支后,如果本地仓库仍然保留了旧的分支的引用,使用
git branch -d <old_branch_name>
来删除,这是本地操作不会影响远程分支
分支合并
确保在要合并的目标分支上,如果将 feature
分支合并到 master
,则你应该在 master
分支上,如果出现了冲突,解决完之后再提交即可
bash
git checkout master
git merge feature
更改remote url
如果已经存在了远程url,基本逻辑就是先移除然后再添加,可以使用-v
来检查当前的url
bash
# 查看当前远程仓库url
git remote -v
# 移除当前的远程仓库url
git remote remove origin
# 添加新的远程仓库url
git remote add origin
项目本地忽略文件(夹)
编辑 .git/info/exclude
文件,添加需要忽略的文件(夹),规则是专属于自己的本地仓库,完全静默,不会被提交或影响他人