git常用命令

 //提交代码
git status
git add -A
git commit -m “注释”
git pull --rebase
git push origin 分支名字:refs/for/分支名字
//先保存本地代码,再把本地的合并到最新代码
$ git stash    # 先将自己的改变保存起来
Saved working directory and index state WIP on master: 6a707cc ...
HEAD is now at 6a707cc ...
$ git pull     # 从远程仓库更新
Updating 6a707cc..f93575d
... ...
$ git stash pop   # 将自己的修改合并到更新后的代码中

//git中文件的各个状态
    unstaged - git仓库中没有此文件的相关记录
    modified - git仓库中有这个文件的记录,并且此文件当前有改动
    staged - 追加,删除或修改的文件被暂时保存,这些追加,删除和修改并没有提交到git仓库
    commited - 追加或修改的文件被提交到本地git仓库(git仓库中大部分都是这种文件,所以git status不显示这些文件)

 
//正在开发的分支和主分支的编辑了同一个文件时, 在主分支上进行 merge 的时候可能会产生冲突.
以下构造一个冲突的示例:
       $ git branch test  # 创建一个分支 test, 但是没有进入test分支, 此时还在 master 分支上.
       $ vim xxxx         # 编辑 master 分支上的一个已有的文件
       $ git commit -am 'xxx message'  # 提交 master 分支的修改
       $ git checkout test    # 切换到 test 分支
       $ vim xxxx             # 编辑之前在 master 上编辑的文件, 可以编辑同一个地方, 造成冲突
       $ git commit -am 'xxx message'  # 提交 test 分支的修改
       $ git checkout master           # 切换到 master 分支
       $ git merge test                # 将 test 分支合并到 master 分支, 由于上面编辑了同一文件, 这里会产生冲突
Auto-merging xxxx
CONFLICT (content): Merge conflict in xxxx
Automatic merge failed; fix conflicts and then commit the result.

git checkout -b develop origin/vMini
//commit
git cherry-pick
//放弃本地修改
git reset --hard
git pull --rebase
//  如果想在原提交的改动上改动,并在原位置更新
git add .
git commit --amend
git push origin vMini2:refs/changes/26929


1、获取工程到当前路径
git clone ssh://gerrit-server/<工程名>.git

2、进入工程目录
cd <工程名>

3、安装gerrit的changeID自动生成hook脚本
scp -p gerrit-server:hooks/commit-msg .git/hooks/
chmod u+x .git/hooks/commit-msg

4、查看当前分支
git branch

5、切换分支
git checkout -b develop origin/featureFeb  (featureFeb为分支名)

6、查看代码状态
git status

7、添加差异代码(按照上一步提示)
git add 文件相对路径

8、修改git到编译器设置为vim
git config --global core.editor vim

9、提交改动到本地
git commit

10、再文件到开头写入注释,开头结尾都留一个空格、保存推出

10.1、commit后发现代码分支提交错了,需要先切回正确分支

10.2、查操作log 找到要commit的<操作ID>
git reflog

10.3、撤回commit
git cherry-pick  <操作ID>

10.4 查当前状态 重新commit

11、从远程拉最新到代码到本地  往服务器提交之前必须执行
git pull --rebase

12、本地解决冲突并运行代码,保证没有功能错误

13、提交改动到远程
git push origin featureFeb:refs/for/featureFeb  (featureFeb为分支名)

14、查整个团队到git日志
git log
 
到此一个提交流程就结束了
有时可能会用到其他操作
A、本地代码某一部分改乱了 想重新获取
git checkout ./<需要更的路径>

16、使用补丁  

接手其他同事未提交的工作,由同事现在本地将改动产生的差异打成补丁.patch文件。

拷贝.patch文件到自己工程的根目录下,注意要和同事使用同一个分支。

使用patch之前先pull一下,获取最新的代码
先检查patch文件:git apply --stat filename.patch
检查能否应用成功:git apply --check  filename.patch
打补丁:git am --signoff < filename.patch

(使用-s或--signoff选项,可以commit信息中加入Signed-off-by信息)

17、查看本地已有的代码改动

git diff

---------一些情况的处理----------------------------------

获取远程最新代码不和本地merge,一般在本地删除 并执行git rm之后 使用如下命令找回误删文件

git fetch:相当于是从远程获取最新版本到本地,不会自动merge

一般如有文件有冲突是不允许从远程获取代码的(git pull --rebase)

这时候需要吧没处理的文件放到暂存堆栈中 git stash

然后查看暂存堆栈 git stash list

从赞存堆栈顶回复之前到工作文件 git stash pop

解决冲突代码就可以继续操作了

---------------------------------------------------

已经成功提交成功代码 并且review 被merged,之后又有修改想做为一个新的提交,提交前没有pull --rebase ,导致,本地当前版本和服务器上的当前版本 不是一个版本

指针差异会导致pull失败。然后误操作 又cherry-pick回来了 。这样之前提交成功已经merged的操作页被拽回来了。

这种情况,用git reset HEAD^ --hard  重新定义指针 ,然后提交之前再pull rebase一遍就OK了

------------------------------------------------------

遇到提交后的代码因为某种原因要在发布的版本中撤销之前开发的功能

1、git log  查之之前提交代码的comm ID

2、git revert commit-id 撤销提交 会生成一个反向的差异文件

3、如果之前有多次提交要撤销,记得按倒着的顺序revert,从最近的一次开始

4、最后解决冲突需要重新提交代码 ,因为之前revert多次,会有多个commit,可以用git把他们合并成一个commit 提交一次就可以了

      git rebase -i HEAD~X   (X是想把之前的多少步操作合并到一起,一个整数。之前看查log确认)

      按照提示修改操作标识 按部就班就可以了

5、如果提交报错提示没有change-id,那么可以找回change-id

     git commit --amend (这一个修改提交的命令,会调用生成change-id的脚本,之前执行revert 的操作没有调用此脚本所以没有change-id)

-------------------------------------------------------

如果要放弃本地修改后更新:
git reset --hard
git pull --rebase

-------------------------------------------------------

冲突解决

其中Updated upstream 和=====之间的内容就是pull下来的内容,====和stashed changes之间的内容就是本地修改的内容。

碰到这种情况,git也不知道哪行内容是需要的,所以要自行确定需要的内容。

-------------------------------------------------------

使用补丁后,改动代码push失败

git status 查看代码状态,看不到补丁中的更新内容

git log 可以看到同事的commit记录(补丁中的改动)

git commit 提交来自己补丁后的改动

git pull --rebase 获取最新代码 解决冲突

git push 的时候失败了,提示美没有change-id

按照提示为commit信息中添加chang-id 还是push失败

是因为使用的补丁,也算一个commit,里面没有chang-id

需要讲两次commit合并成一个commit

使用命令 git rebase -i 来调整之前的提交 (谨慎操作)可以改变历史commit的顺序,也可以合并两个commit

然后再用 git show HEAD 来看提交的代码改动。

确认无误之后 pull代码,解决冲突,push到服务器。

--------------------

撤销对某个文件的修改(commit之前)

当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- filefullname。

--------------------

成功push代码之后,发现commit的备注错了。

在gerrit上放弃本次提交,本地用git commit -amend修改之后,重新push失败。

放弃之后就不能重新提交了,此时的处理方式:

1、git reset HEAD^ 版本撤回上次提交

2、git status; 查状态 看到上次修改为 change after reset;然后git add -A  全部添加;git commit -m "remark" ,直接带着备注内容提交

3、git pull --rebase; git push ......

------------------------------------------------

1、解决冲突代码,编译通过
2、在当前临时分支 git add .
3、git rebase --continue
4、git pull --rebase
已经提交到gerrit的代码因为存在冲突,无法merge,pull --rebase 最新的代码。
代码中包含冲突,git status处于临时分支。

处理方式:

1、解决冲突代码,编译通过

2、在当前临时分支 git add .

3、git rebase --continue  ,执行之后回到原来的分支; 如果回到原来的分支,在continue的时候又遇到了新的冲突,继续重复这些步骤解决

4、git pull --rebase

5、git push origin ………

-----------------------------------

撤销已经提交的commit(未push)

1、git log 查看commit记录,最新的在最上面,要撤销的commit在第1条

2、复制下随后第2调记录的commit-id

3、git reset --hard <刚才复制的commit-id>

执行之后,版本回到一次提交之后的状态,之前的改动全部丢失。 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值