Git基本操作


# 1.基本操作


git status 查看状态

git branch -r 查看所有分支

git branch -D 分支名 删除本地分支

git branch --track BR_Veative origin/BR_Veative 追踪origin分支BR_Veative并在本地建立分支BR_Veative
git checkout -b BR_Veative origin/BR_Veative 追踪origin分支BR_Veative并在本地建立分支BR_Veative

git branch BR_Veative 建立分支

git checkout BR_Veative 切换分支

git pull --rebase pull一下

git diff <file>查看修改
如果<file>中间有空格,需要在<file>两边加“”

git checkout -- <file> 放弃此次修改

git stash 刚修改文件临时缓存起来,然后pull代码时不会报错

git stash pop 接上一条命令,当pull结束后再讲修改pop出来,进行add等后续操作

git add -A/<file> 添加所有文件/file

git commit -s -m "description" commit

git push origin head:refs/for/<分支名称> push到分支

git remote -v //查看远程信息

 

# 2.基于Gerrit的Push方法

commit 或者push之前先pull一下

在本地将修改合并到主分支:
1)现在本地切换到主分支master
2)git fetch ssh://..........
3) git push origin head:refs/for/master


# 3.一个完整的提交循环
## 3.1 git status 查看更改添加文件状态
1)git checkout -- <file> 放弃不需要修改的文件
2)对于untracked files如果需要则下一步中添加提交,不需要则后续处理

## 3.2 git add <files>
1) git add <file> 添加单个文件
2)git add *.unity 只添加某一类型的文件,如.unity文件
3)git add --a 添加所有文件

## 3.3 git commit -s -m"信息" 提交以及相关信息
1) git log 可查看提交信息 Q退出
2)git --amend 修改commit的信息,并按esc然后按shift+z(两次)退出
3)git reset --hard <commit id> 对于不需要提交的文件如生成的untracked files可以最后统一commit,
通过reset --hard强制会退到上一次commit(<commit id>)位置,来放弃不需要的文件

## 3.4 git pull --rebase 将远程分支代码拉下来合并到本地

## 3.5 git push orgin head:refs/for/分支名 将合并后的本地分支提交到远程

**如果需要本地合并到其他主分支**
## 3.6 git checkout master 切换到主分支

## 3.7 git pull --rebase 将远程主分支合并到本地

## 3.8 git cherry-pick <commin id> 将本地分支提交的commit合并到主分支
1) git fetch ss://.... 此步骤也可以根据gerrit提交记录选择cherry-pick的链接来实现

## 3.9 git push origin head:refs/for/master

## 3.10 切换到工作分支


# 4.一修改本次commit或者push
1)git log 查看日志
2)git reset <commit id> 返回上一次提交(此时git status 机会看到commit的文件又重新出现)
3)把不需要的文件checkout掉或者新加的add一下
4)git reset <commit id> 返回本次提交(git status可以看到放弃提交的文件,(并可以用git add))
5)git commit --amend
6) 如果需要push

# 5.pull --rebase conflict
在rebase的过程中,有时也会有conflict,这时Git会停止rebase并让用户去解决冲突,解决完冲突后,用git add命令去更新这些内容,
然后不用执行git-commit,直接执行git rebase --continue,这样git会继续apply余下的补丁。
在任何时候,都可以用git rebase --abort参数来终止rebase的行动,并且mywork分支会回到rebase开始前的状态。

**解决冲突:**
1)对于文本代码,可以在vs中直接看到错误的地方,直接修改即可
2)对于jar包或者场景文件则,git status看到冲突的包(unmergerd paths),然后git reset(checkout)后就可以git rebase --continue
然后修改冲突文件,git commit --amend一下


# 6.push [remote reject] head->refs/for/(分支名)(change XXXX closed)
1)gerrit上输入上述提示中的XXXX,查找到与xxxx相关的已经合并
2)git status查看发现本地比远程多5个commit,而gerrit上显示4个commit没有合并,这是因为本地多出来一个commit(未知原因)与之前已经合并
的commit完全一致,所以提示已经closed。类似问题很多,比如如果的你的本次提交的依赖在gerrit上abandoned也会出现此问题,解决方法如下:
3)先把本地修改commit一下,记录commit id,git reset --hard到出问题的commit前一次commit,然后把gerrit上的patch依次cherry-pick下来,然后把本地的commit也
cherry-pick下来
4)push即可

# 7.push [remote reject] head->refs/for/(分支名)(no changes made)
1)伴随warning:No changes between prior commit xx and new commit xx,一般发生在cherry-pick后在提交,正常两个commit
id相同则相当于更新commit;如果commit id不同而两次提交内容又相同,则会报上述问题,在gerrit上随便修改一下commit message更新一下patch则可以继续提交


# 8.missing Change-ID in commit...
1)Change-ID为gerrit生成的
2)解决方法:

**第一种:**
1)运行错误提示gitdir=$(git rev-parse --git-dir);scp-p -P 29418...
2)git commit commit --amend 退出即可生成Change-ID,即可提交
3)此方法使用与最新的commit丢失Change-ID的情况
**第二种**:
1)如果不是最新的一次commit丢失ID则
2)git reset回退到丢失ID的commit
3)git commit --amend 后续同第一种方法
**第三种:**
1)适用于丢失Change-ID的commit距离最新的commit较远
2)git log 找到丢失ID的commit:如xxxxxx
3)git rebase -i commitid(为丢失change-id的commit的上一条commit) 打开默认编辑器
4)将缺失了Change-Id的commit前面的"pick"改为"reword"即可,保存退出,git会逐个打开被你标注了reword的提交日志页面,然后保存退出
5)gitlog查看change-id已经存在

方法来源:https://blog.csdn.net/u012843873/article/details/82424514


# 9.丢失Signed-off-by
git commit --amend -s


# 10.修改commit msg
git commit -"msg" --amend