强制覆盖本地仓库
git fetch
git reset --hard origin/master
git pull
覆盖本地仓库特定文件
git fetch
git checkout -m origin/master <filename>
git push之后合并提交
以合并最新两次提交为例
- 查看commit历史:
git log
- 选择要合并的commit,2代表合并最新的两条commit:
git rebase -i HEAD~2
- 修改要保留的commit和要合并的commit:vim自动打开相关的log文件,包含之前commit的说明信息,以pick info的形式,将除了第一条log的前面的pick改为s,vim保存退出。
- 修改commit的文字描述:自动出现新的message文件,按照需求修改,不需要的commit文字描述可以注释掉,保存退出。
-
git log
查看,两次信息commit已经合并 - 提交到远端:
git push --force origin master
- 参考文献:git push之后合并两次提交
Git合并已经push的commit
与fork仓库保持一致
- 查看现有远程仓库:
git remote -v
- 添加指向被fork仓库的upstream:
git remote add upstream <url>
- 查看origin和upstream:
git remote -v
- 从upstream仓库拉去代码:
git pull upstream master
注意
:origin表示个人远程仓库,upstream是被fork的远程仓库
merge指定文件
- 问题描述:git merge合并整个代码仓,无法合并指定文件,在开发任务中,只想合并(merge)与本人相关的文件,忽略其他的冲突文件。
- 具体问题:目标分支:target_branch , 个人修改分支personal_branch, 合并personal_branch分支文件fileA 和fileB到目标分支target_branch
- 创建目标分支的临时分支并切换到临时分支:
git switch -c temp_branch
- 合并personal_branch分支到临时分支:
git merge personal_branch
- 解决冲突文件fileA和fileB,其他冲突文件忽略
- 提交冲突文件:
git add
git commit
- 切换到目标分支:
git switch target_branch
- 使用临时分支中的文件覆盖本分支指定文件:
git checkout temp_branch fileA fileB
- 提交修改:
git commit
- 完成指定文件的合并,后续
git push
或者git pull
其他操作按照个人需求操作。 - 参考: git小技巧--如何从其他分支merge个别文件或文件夹
git pull命令详细解释
含义:取回远程主机某个分支的更新,再与本地的指定分支合并。
git pull <远程主机名> <远程分支名>:<本地分支名>
例1:取回origin
主机的next
分支,与本地的master
分支合并
git pull origin next:master
例2:取回origin
主机的next
分支,与当前分支合并(省略冒号后面的本地分支指定)
git pull origin next
例3:在git clone
的时候,所有本地分支默认与远程主机的同名分支建立追踪关系,若当前分支只有一个追踪分支,则:
git pull
git remote
- 列出远程主机名:
git remote
- 列出远程主机名并查看地址:
git remote -v
- 远程主机名默认为
origin
- 查看远程主机的详细信息:
git remote show <主机名>
- 添加远程主机
git remote add <主机名> <网址>
,例如添加upstream
远程主机 - 删除远程主机
git remote rm <主机名>
git remote remove <主机名>
- 重命名远程主机名:
git remote rename <原主机名> <新主机名>
git fetch
- 拉取远程主机的更新,默认拉取所有分支:
git fetch <远程主机名>
-
git fetch
通常用来查看其他人的进程,因为它取回的代码对本地的开发代码没有影响 - 指定拉取的分支:
git fetch <远程主机名> <分支名>
git fetch origin master
- 所取回的更新,在本地主机上要用远程主机名/分知名的形式读取,例如
origin
主机的master
分支,要用origin/master
读取。
git merge
git rebase
git checkout
git reset
git push
- 将本地分支更新推送到远程主机
git push <远程主机名> <本地分支名 >:<远程分支名>
- 两分支存在“追踪关系”可以省略远程分支名:
git push <远程主机名> <本地分支名>
,例如git push origin master
- 省略本地分支,表示删除指定的远程分支,等同于推送一个空的本地分支到远程分支
git push origin : master
- 上述删除远程分支操作也可用
git push origin --delete master
- 当前分支与远程分支存在追踪关系,则本地分支和远程分支都可以省略:
git push origin
- 强制推送,覆盖远程分支:
git push --force origin