一、问题描述
在使用git上推时出现下列错误:
! [rejected] master->master(non-fast-forward)
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: ‘git pull …’) before pushing again.
hint: See the ‘Note about fast-forwards’ in ‘git push --help’ for details.
二、问题原因
本地分支和远程分支的历史不一致,且这种不一致无法通过快进(fast-forward)方式解决。
三、 解决方法
为了解决本地分支和远程分支的历史不一致,就需要合并分支。有两种方式,通过图形界面或者使用命令行。
3.1 合并分支
(1)通过图形化界面
在项目下打开图形化界面,并点击Merge->Local Merge…
(2)通过命令行
进入要合并的分支:
git checkout master
git pull
查看所有分支是否都pull下来
git branch -a
合并分支
git merge 分支名
接着提示文件被修改,无法合并。
3.2 解决文件合并冲突
在使用Git进行文件合并时,如果遇到提示某个文件已修改,这通常意味着该文件在要合并的两个分支中都有过改动。Git在尝试自动合并这些改动时,可能遇到了冲突,无法确定应该使用哪个分支中的更改。这时,Git会标记这些文件为冲突状态,并需要手动解决冲突。
解决冲突的步骤如下:
-
查找冲突文件:git会列出所有存在冲突的文件。
git status
-
处理修改文件:对于那些被修改但未暂存的文件,你需要决定是否保留这些改动。
#对要保留改动的文件将它们添加到暂存区 git add 文件名 #对不需要保留改动的文件 git restore --staged 文件名 #或者 git checkout -- 文件名
-
处理删除文件:对于被删除的文件,执行以下命令不仅会从工作目录中删除文件,也会将其从Git跟踪列表中移除。
git rm 文件名
-
处理未跟踪的文件:对于未被Git跟踪的新文件,如果你希望将它们纳入版本控制,可以使用
git add <file>
命令添加到暂存区。如果不想跟踪某些文件,可以更新.gitignore
文件来忽略它们。 -
提交变更:在决定好如何处理上述所有变更后,使用以下命令来提交这些变更。确保在提交信息中清晰地描述了所做的更改。
git commit -m "Your commit message"
如果进入编辑器页面,看到这样的窗口:
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Changes to be committed:
# modified: love.md
# deleted: example.txt
# Changes not staged for commit:
# modified: 4.py
# deleted: check.txt
# deleted:"\345\233\275\345\257\206sm.md"
# modified:"\345\256\211\345\205\250\344\272\213\344\273\266.md"
# Untracked files:
# .gitignore
# A.spec
# build/
~
~
~
首先,删除光标位置下(以#
号开始的行)的所有行。这些行是注释,不会被记录为提交信息的一部分。然后,在空白处写下对本次提交的简短描述。
chore: Clean up untracked and deleted files
Update love documentation(根据自己的情况适当修改,填写自己的文件,可以根据窗口中Changes to be committed部分填写)
Remove unnecessary example.txt(根据自己的情况适当修改,填写自己的文件可以根据窗口中Changes to be committed部分填写)
其次保存并退出编辑器,一旦您成功保存并退出编辑器,Git将接收您的提交信息,并将暂存区中的更改作为一次提交记录到仓库中。