天天看点

Git常用命令_初入职场必备(长期更新维护)常规命令冲突解决已经合并的请求不要再git commit --amend --no-edit多次提交克隆单分支git reset HEAD小心点要把修改转移到另外的分支,但直接跳转分支失败

常规命令

# 删除远程分支
git push origin --delete new_a

## 删除异常
error: unable to delete 'issue/2020072000117-add-the-operation-log-for-file-dump': remote ref does not exist
error: failed to push some refs to 'cs.devops.xxx.org:XXX/personal/cluster-manager.git'

在gitlab上查看远程分支确实已经删除,但是通过git branch -a 仍然可以看到该分支,最后通过git remote show origin命令查看,

按照该命令给出的提示,执行git remote prune origin命令后就解决了这个问题

# 删除本地分支
git branch -d new_a


# 撤销提交
HEAD^的意思是上一个版本,也可以写成HEAD~1

如果你进行了2次commit,想都撤回,可以使用HEAD~2

--mixed 
意思是:不删除工作空间改动代码,撤销commit,并且撤销git add . 操作
这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。

--soft  
不删除工作空间改动代码,撤销commit,不撤销git add . 
 
--hard
删除工作空间改动代码,撤销commit,撤销git add . 

注意完成这个操作后,就恢复到了上一次的commit状态

# 查看差异
git diff
# z,b:上一页
# f,space:下一页


# 把本次commit叠加到上次commit上面,且使用上次的commit -m 
## 优美方式如下
# https://www.jianshu.com/p/c9db76c2936e

git commit --amend --no-edit

# 这样新的修改会附加在上一次提交上面

## 暴力方式如下(保留代码地回退两次)___谨慎使用
git reset --mix HEAD~2
git add -A
git commit -m "上次的message"
git push

# 使用Git下载指定分支命令为:
git clone -b 分支名仓库地址

# 查看历史提交
git log --oneline
git log
git log --all
           

冲突解决

一、在一个分支下使用git pull文件时和本地文件冲突

场景:多个小伙伴都在同一个dev分支下开发,别人提交了代码,你没有及时pull。

当你使用git pull代码时,经常会碰到有冲突的情况。

简要:主要是使用git stash命令分成以下几个步骤进行处理

1、

git stash

先将本地修改存储起来

2、

git pull

获取内容

3、

git stash pop

还原暂存的内容

4、此时会提示冲突 解决冲突

<<<<<<< Updated upstream 和=====之间的内容就是pull下来的内容,

====和stashed changes之间的内容就是本地修改的内容。

自行确定需要的内容。

解决完成之后,就可以正常的提交了。

5、继续修改你的代码

然后就可以顺利push了

二、合并某个dev分支到master分支时冲突

你落后了提交不要在自己有过提交之后merge主分支,否则你push之后,多一个merge提交历史,导致到时候主分支提交记录很乱,所以只有在你没有提交过的时候才能先merge

场景:多个小伙伴在各自分支下开发,别人先提交冲突文件并且merge到主分支,你在提交并且merge到主分支时提示有冲突。

简要:重新拉取主分支代码与自己所在分支合并,解决冲突。然后push。

1、

git checkout master

切换到主分支

2、

git pull

拉取主分支最新代码

3、

git checkout dev1

切换到dev1分支

4、

git pull

拉取最新代码

5、

git merge master

合并主分支最新代码到dev1分支

6、此时肯定会有冲突 解决冲突

7、

git push

推送本地dev1分支最新代码到远程dev1分支

8、从新提交merge request或请求上级重新合并dev到master分支

————————————————

原文链接:https://blog.csdn.net/bocai_xiaodaidai/article/details/103776753

已经合并的请求不要再git commit --amend --no-edit

这样子会导致远程检测出合并冲突

不好回退这个命令了,所以直接备份自己的修改,然后删掉当前分支,重新pull主分支,新建分支,加一个新的合并请求

多次提交

只要远程合并请求未同意,就可以继续push修改远程分支,这样远程的变更也会实时同步,不用重新提交合并请求

配合 git commit --amend --no-edit 使用

克隆单分支

发现

**-sys-files

克隆只有

*****x.0.4

所以

git clone -b branchA http://adm***

git reset HEAD小心点

因为自己忘了切换分支,直接在主分支add了文件,没用

add reset HEAD <file>

,而用了

add reset HEAD~

然后自己也没有及时发现问题的原因,只知道出了错误,然后就切分支去

git add

自己需要提交的文件完成工作了

然后现在发现了问题的本质了,就知道要git reset到一个很新的版本了

因为

git pull origin XXX

git log

发现没有新的提交记录

然后

git log --all

才发现自己的分支停在了我的那提交那里(不会因为我的pull改变!)

所以

git reset --hard **(git log --all里最新的版本号)

解决了问题

要把修改转移到另外的分支,但直接跳转分支失败

一般来说是你要跳转的分支添加了修改的内容但未提交,然后你要跳转的分支没有你这些修改的内容,强行跳转会让你的修改内容丢失

所以git不准你跳转,并报错

error: Your local changes to the following files would be overwritten by checkout:
        cluster_manager/common/public_macro.py
Please commit your changes or stash them before you switch branches.
Aborting
           

解决方案如下

# 检测状态
git status
# 确定本分支需要提交的内容,有则先提交本分支
git add ***
# 保存修改到暂存区
git stash 
# 看清况决定是否要切换到主分支,pull最新代码
git switch master
git pull origin **
# 创建或移动到新分支
git checkout -b new_branch
# 弹出你的修改内容
git stash pop