转载自:http://147731489.i.sohu.com/blog/view/233041680.htm
1、git status
        <1>、已经是准备提交状态(git add 之后的状态)
                 可以通过git reset HEAD <file>,恢复。执行此命令不会还原所做的修改,可放心使用。
                 # Changes to be committed:
                 #   (use "git reset HEAD <file>..." to unstage)
         <2>、有做修改,但暂不提交状态(未执行git add的状态)
                 使用git add <file>进行提交,或者使用git checkout -- <file>放弃修改,还原为与服务器版本一致的代码。
                 Changes not staged for commit:
                 #   (use "git add/rm <file>..." to update what will be committed)
                 #   (use "git checkout -- <file>..." to discard changes in working directory)
         <3>、未跟踪文件(本地新增加的文件,服务器代码仓库中没有的文件)
                使用git add <file>进行提交
                 # Untracked files:
                 #   (use "git add <file>..." to include in what will be committed)

          一般是一些编译生成的文件,我们不需要提交。即可以使用.gitignore进行忽略。

2、git rm
        删除git工程里的某文件
        git rm
        git commit -m “ ” 
        git push
        注意,使用git rm 之后,git status查看,可以看到文件状态已经为change to be committed。所以不需要再做什么git add的处理了。其他git mv等命令也是类似。

3、merge信息
        git pull后出现冲突情况,使用git log看到megre的log信息。判断当git push时会将此merge信息提交,致使出现merge问题。 
        解决方法:git reset SHA
        SHA值由git log 时查看,每个提交的SHA值不一样。

4、git branch
        因为repo init 时,有增加一个-b 的参数,此参数会连带下载该分支的默认manifest.xml,repo sync时会根据此manifest.xml下载该分支代码。因此下载到本地的代码可不必再进行分支切换。即不再需要运行如下命令:repo forall -c "pwd&git checkout -b XXXXX origin/XXXXX&echo"
        本地没有分支的情况,更新和提交代码时,命令会有所不同。即要指定更新和提交的分支。
               git pull 变为 git pull origin <branch_name>
               git push 变为 git push origin HEAD:refs/for/<branch_name>
        本地不做分支切换,可避免git pull时,自动出现merge消息。即类似如下的消息:Merge branch 'XXXXX' of ssh://192.168.1.2:29418/XXX/XXX/XXX into XXXXX
        当出现此merge消息时,则需要手动合并处理,后续介绍。

5、cherry-pick
        提交到gerrit上,出现本次提交依赖于(depended on)merge消息时处理方法:
        <1>、将merge的提交放弃(Abandon change),
                 即放弃类似Merge branch 'XXXXX' of ssh://192.168.1.2:29418/XXX/XXX/XXX into XXXXX的提交记录。
                 注意,真正修改到代码的提交记录不需要放弃。

        <2>将本地代码更新到服务器最新
                git reset --hard HEAD  
                此命令有可能将本地修改内容还原为与服务器相同,所以最好做备份。
                git fetch origin 
                更新服务器代码 (git fetch 与git pull的区别在于,git pull = git fetch + git merge,所以使用git pull会出现一下merge消息,相对来说,git fetch安全一点)。如果fetch下来,出现冲突,则需要手动合并。

         <3>cherry-pick代码,重新提交
              在依赖于merge的提交记录中,复制cherry-pick,并本地执行一下。如:git fetch ssh://username@192.168.2.1:29418/XXXX/XXX refs/changes/14/214/1 && git cherry-pick FETCH_HEAD。然后再提交,git push origin HEAD:refs/for/<branch_name>,提交到指定的分支。即会取消原有的依赖关系。