git命令常见问题整理

一、git pull命令

1.1 问题1:输入git pull命令提示如下:

error: your local changes would be overwritten by cherry-pick.
hint: commit your changes or stash them to proceed.
fatal: cherry-pick failed

原因:对本地代码进行了修改,但没有把修改提交或存放
解决方法:
1、如果想拉git服务器最新代码,但又不想丢弃本地修改。
先使用git stash将修改的代码将暂时封存起来,等拉完git服务器最新代码,再使用git stash pop恢复本地修改

git stash
git pull origin master
git stash pop

2、如果你想完全地覆盖本地的代码,只保留服务器端代码,则直接回退到上一个版本,再进行

git reset --hard HEAD^
git pull origin master

1.2 问题2:输入git pull或git stash pop命令提示如下:

Unmerged paths:
  (use "git restore --staged <file>..." to unstage)
  (use "git add <file>..." to mark resolution)
        both modified:   app/src/main/java/com/exa/tester/TesterActivity.kt

在TesterActivity.kt文件出现<<<<<<< Updated upstream、=======和>>>>>>> Stashed changes这些标记,出现这个问题是因为从服务器拉下来的代码和本地冲突了,不过已经切换为服务器最新分支,在本地解决下冲突就可以了
<<<<<<< Updated upstream到=======之间的代码是你拉取的服务器代码,那么=======到>>>>>>> Stashed changes是你自己本地修改的代码。这样有了明确的冲突标记符再修改起来就很方便了

  • 要保留本地代码,就删除<<<<<<< Updated upstream到=======的内容
  • 要保留服务器代码,就删除=======到>>>>>>> Stashed changes的内容

1.3 问题3:输入git pull --rebase命令提示如下:

You are not currently on a branch.
Please specify which branch you want to rebase against.
See git-pull(1) for details.

    git pull <remote> <branch>

解决方法1:先切换到指定远程分支,再更新代码

 git checkout 分支名    // 切换到指定远程分支
 git pull --rebase

解决方法2:直接更新远程指定分支的代码到本地分支

git pull origin 分支名

二、git push命令

2.1 问题1

remote: ERROR: commit 99cd9fd: missing Change-Id in message footer
remote:
remote: Hint: to automatically insert a Change-Id, install the hook:
remote:   gitdir=$(git rev-parse --git-dir); scp -p -P 29418 [email protected]:hooks/commit-msg ${gitdir}/hooks/
remote: and then amend the commit:
remote:   git commit --amend --no-edit
remote:
To ssh://127.0.0.1:8080/packages/apps/Xty
 ! [remote rejected] HEAD -> refs/for/master (commit 99cd9fd: missing Change-Id in message footer)
error: failed to push some refs to 'ssh://127.0.0.1:8080/packages/apps/Xty'

问题是缺少commit-msg文件,所以提交时找不到Change-Id
只需要根据提示补全Change-Id即可,依次发送命令

gitdir=$(git rev-parse --git-dir); scp -p -P 29418 [email protected]:hooks/commit-msg ${gitdir}/hooks/
git commit --amend --no-edit
git push origin HEAD:refs/for/master

三、提交的代码提示 Merge Conflict

在同一仓库中,如果A提交的一笔代码没有合入,而B提交的代码和A提交的代码有冲突但比A先合入后,A的这笔提交status就会显示Merge Conflict
解决方法:
1、使用git pull --rebase命令在本地更新仓库的最新代码
2、将A提交的代码Cherry Pick到本地,本地会提示“”
3、输入git status可以看到冲突的是哪些文件,
4、回退这些文件,依次输入

git reset HEAD 文件名
git checkout -- 文件名

5、将修改加入到刚才哪些文件中
6、输入以下命令,就会覆盖掉A的那一笔提交

git add .
git commit    // 注意,这里是git commit,不要加--amend
git push origin 分支名

猜你喜欢

转载自blog.csdn.net/qq_34205684/article/details/128038918