目录
一. git配置
1. github全局配置参数
- git config --global -l : 查看所有全局配置
- git config --global http.version HTTP/2.0 : 修改全局HTTP协议版本
- git config --global unset http.proxy :取消代理
2. github生成私人Token
在github上生成Token是一种安全的方式,以下是步骤:
1. 登录github账户,点击右上角头像,选择“Settings”(设置)
2. 在左侧导航栏,找到“Developer Settings”(开发者设置)-> Personal Access Tokens,选择Tokens(Classic)
3. 配置令牌 -> Generate Token(生成令牌)
- 为token赋予权限,如果从命令行操作仓库,至少选中repo
- admin:org(组织管理)
4.复制令牌:一旦生成令牌,将只显示一次。一定要复制生成的令牌并妥善保存,我们将无法再次看到此令牌的内容
3. git基本操作
git分为三个区:
- 工作区:存放文件的地方
- 暂存区:工作区的变更,提交到暂存区
- 版本库:暂存区的内容,提交到版本库
4. git status
有两种颜色:
-红色:工作区变化了,但是没有提交到暂存区
-绿色:已经提交到暂存区,没有提交到版本库
-没有:所有东西都在版本库中了[所有文件都被git管理起来了]
把文件移到暂存区
1. 把工作区变更的文件(红色的文件)提交到暂存区
- git add . # 提交所有变更的文件
- git add 文件名 # 指定某个文件提交
2. 把暂存区的文件提交到版本库(作为一个版本):
- git commit -m "注释"
二. git提交不成功情况
1. Operation Time Out连接超时 | 服务器无响应
1. git config --global --unset http.proxy 先取消代理,试一下
2. 如果还不行,尝试将远程url从http替换成git@github.com,然后再试一下
- git remte -v
- git remote set-url origin <新的远程地址>
2. 本地有其他修改文件没提交
例如:
- 错误:不能变基:您有未暂存的变更。
- 错误:请提交或贮藏修改。
git stash可以将那些修改过但是不准备提交的多余文件暂存到一个位置,
git stash pop可以将这些文件从暂存处出来
3. 将几次提交合并成一次
git log可以看到提交的日志以及commit id
1. 确定需要合并的提交次数
git rebase -i HEAD~3
上述命令的HEAD~3就是表示想对HEAD前的最近3次提交进行rebase
2. 编辑交互式rebase文件:
-
执行上述命令后,Git 会打开一个文本编辑器,显示如下内容:
pick abc123 Your commit message 1 pick def456 Your commit message 2 pick 789ghi Your commit message 3
-
将需要合并的提交的前面的单词
pick
改为squash
或s
。例如,如果你想将第二次和第三次提交合并到第一次提交,可以这样修改:pick abc123 Your commit message 1 s def456 Your commit message 2 s 789ghi Your commit message 3
- 保存并关闭编辑器: 修改完文件后,保存并关闭编辑器。
-
编辑合并提交的信息: Git 会再次打开一个编辑器,允许你编辑合并后的提交信息。你可以保留第一个提交的信息,也可以编辑为新的信息。
-
保存并关闭编辑器: 保存并关闭编辑器。
-
完成 rebase: 至此,你已经成功将多个提交合并为一个提交。如果一切正常,Git 将会告诉你 rebase 成功。
-
推送到远程仓库: 如果你的提交已经推送到远程仓库,你可能需要使用
--force
选项强制推送。git push origin branch-name --force
注意:使用
--force
选项会覆盖远程仓库的提交历史,慎用。
请记住,避免在公共分支上执行 rebase 操作,因为它会改变提交历史,可能会对共享的历史造成混淆。如果你在公共分支上工作,最好使用
merge
而不是rebase
。
4. git rebase master的文件解决冲突
操作步骤
- 先保证本地的开发分支和master分支都是最新的code
- 切换到你现在开发的分支,在git命令中输入:git rebase origin/master
- 这样就会把你现在正在开发的分支中已经写好的代码与最新的master分支的代码合并在一起
- 合并的过程中可能会涉及很多冲突需要解决。
- 输入 git status 显示冲突的文件,然后找到那个文件解决冲突。git status如果不显示冲突文件,但又处于rebase状态,输入git rebase --skip
- 输入git add [文件名],这样才算解决一个冲突,
- 输入 git rebase --continue ,继续git status …
- 直到所有的冲突全部解决
- 解决完冲突后,推送到远程库。>git push --force(一个人开发时候用)
- 完成
如何终止rebase操作:
输入 git rebase --abort ,回到最初的状态,前面解决的所有冲突都会恢复到以前的状态
如何查看rebase完成了呢?
git branch看看自己是否在开发分支,如果回到开发分支,就是rebase完成。
如果rebase没有完成,git branch不会在开发分支,会在rebase新开的一个临时的分支里面。
git branch -v 查看自己的分支,以及自己的分支与远程分支落后多少个文件,如果落后了就git pull,解决冲突。
git push失败,可能是本地这个分支有一些文件落后远程分支,需要git pull
三. 提交到总项目上
自己的分支修改完毕了而且通过了critic的话就可以请求合并了
回到自己的浏览器中的仓库主页,在总的项目里面找到申请合并(创建合并请求),之后申请合并点击确认确认确认就请求合并成功了。
1. git保持fork仓库的更新
因为如果自己的fork仓库一直不更新的话,将某一分支代码提交到分支上去这个分支可能会涉及到很多次commit,所以这时候应该将自己的fork仓库更新到最新,因为自己写的代码已经commit到本地了,所以这时候如果自己的fork仓库没有什么很重要的东西的话,其实是可以直接删除掉,再重新fork一个,如果仓库名称不变的话,就也不需要重新配置远程仓库。
2. git查看远程仓库的log
git log remotes/fany/task/T28444 –oneline
不知道远程分支名字的话:git branch -a
3. 只提交一次commit到分支上
假设我们处在A分支想将B分支最新的一次提交提交到A分支上,可以在A分支上输入:
git cherry-pick B
后面可以接分支名字也可以接commit编号
四. 拉取远程代码并且不覆盖本地修改的代码
- git pull origin dev-my //有冲突则合并冲突
- git add .
- git commit -m "合并"
- git push origin dev-my //大功告成
链接:关于git的使用
- git分支新建提交代码
- 已有分支,拉取主分支代码到自己的分支(会覆盖本地代码)
- 拉取远程代码并且不覆盖本地修改的代码
1. git pull
- 更多请阅读:git pull命令 -Git教程
-
git pull <远程主机名> <远程分支名>:<本地分支名>
比如,要取回origin主机的next分支,与本地的master分支合并,需要写成下面这样
git pull origin next:master
如果远程分支(next)要与当前分支合并,则冒号后面的部分可以省略。上面命令可以简写为:
git pull origin next
上面命令表示,取回origin/next分支,再与当前分支合并。实质上,这等同于先做git fetch,再执行git merge。
- git fetch origin
- git merge origin/next
2. git stash
git stash暂存我们对工作副本做出的修改,以便我们可以处理其他事情,处理完其他事情再回来应用他它们。
如果我们要快速切换上下文并处理其他事情,当时我们代码正改了一部分,还没有准备好对其进行提交。那么这种情况下 git stash 就很有用了。(注意
,stash 位于本地 Git 仓库的;推送时,stash隐藏的修改不会传输到服务器。)
- git stash
- git status
- git stash pop
默认情况下,git stash pop
将重新应用最近创建的存储:stash@{0}
我们还可以通过指定标识符选择要重新应用的 stash,例如:$ git stash pop stash@{2}
- git stash drop
$ git stash drop stash@{1}
Dropped stash@{1} (17e2697fd8251df6163117cb3d58c1f62a5e7cdb)
- git stash list
3. git push
git push <远程主机> <本地分支名>:<远程分支名>
git push critic task/T28288:task/T28288
强制推送:这个分支只属于你自己
git push fany task/T28288:task/T28288 --force