@chyoo1991
2015-10-13T01:46:38.000000Z
字数 2423
阅读 2719
git
代码管理
最近实习过程中,Git老是用的不到位。其原因有两方面:
这阵子和大伙一起开发,一方面知道了协作的问题,另一方面也明白了项目开发中对Git使用的一些需求。
这篇总结主要集中在两个方面:
好的习惯能避免很多很多问题。我觉得应该是好的习惯:
决定写代码之前,确定Git工作流:集中式?分支pull merge?
如果是集中式,只需要在master上修改和开发。但要注意在git push
之前,git pull
一下。当然,也可以用git fetch
:
git fetch origin master # 取得远程主机origin的master分支的最新更新
git merge origin/master # 把本地分支与远程master最新的合并
git pull
或者 git merge
这种方式是创建一个新的commit。如果在合并过程中出现冲突,则需要解决冲突,然后再 git add
和git commit
,最后git push
上去。
当然,如果直接执行git push
,当远程分支上有了新的更新,这时候push不会成功,就要用上述办法解决。
现在比较好奇的是我本地有多个commit,远程也新提交了多个commit,最后合并成一个commit,那么git log会是怎么样的?
对于这个问题,我的猜想是:把本地的commit log加在远程的commit log之前,再加一个merge log,不然会破坏远程的commit tree,提交的时候必须加--force了。
查证了下,我的理解还是有误。commit log 是以commit log 树的形式展示,这儿是分叉的,不是把谁加在谁前。不过,远程显示的时候,还是按照时间顺序显示commit log。
查看commit log 树的方式:
git log --graph
除了git pull
和git fetch
,还可以用rebase方式,这种方式可以保证commit log具有好看的线性提交记录。
git fetch origin master # 取得 master的最新信息 [应该可以不用这个命令]
git rebase origin/master # 将本地分支放在最新的之前,生成新的commit
git push
如果是pull merge方式的话,就需要开分支。此时要:
在本地开新分支的命令:
git checkout -b new_branch
在本地开发完毕,提交的时候要注意:
git push origin new_branch
会自动给创建分支git push
git push
后面不加任何参数的时候,一定要确保自己是处于push simple状态git remote show 远程主机名
查看tracking关系所说的节奏是自己在开发或者是修改代码的时候,应该用什么样的节奏使用Git。
git log -p
rebase
一下,合并成一个commit,写好commit message,这是对本地自己的提交的合并。git push
一下就把所有的事情搞定。一定要考虑下会造成什么影响,比如远程已经有人更新了新的commit,又或者是本次与远程相比更改了啥内容,便于发现错误。远程提交应该是一个比较慎重的行为,不像在本地,想怎么玩就怎么玩。git add -p
代替git add .
明确自己提交了哪些修改,而哪些修改不用提交,比如一些因为要在本地运行的配置修改,就不用提交到远程了。git checkout --filename
来恢复git add
暂存区了,则可以先用git reset HEAD filename
将本地库里面最新的文件替换掉暂存区里面add
的内容,再用git checkout
恢复工作区git reset commit_id
来撤销commit[回退版本],这个会导致在commit_id之前的提交一并被撤销。上面两个办法恢复工作区。如果闲麻烦,可以直接用:git reset --hard commit_id
,会硬性回退,工作区和暂存区都被恢复成commit_id所对应的版本。`git reset --hard origin/master
git revert commit_id
,revert的方式是反写修改,生成新的commit
git stash # 当前修改了,但没有提交,又要切换分支,就先stash一下
git stash pop # 恢复当前工作区
git reset --hard origin/master # 将当前工作区完全恢复成远程分支一样
git reset --hard commit_id # 硬撤销到某次提交
git blame filename # 查看这个文件的历史修改
git revert commit_id # 撤销某次提交,反写,以新的commit保存
git log --follow -p filename # 查看修改历史,对排错很有用
git commit --amend # 重新提交,可以添加忘了提交到暂存区的,还可以修改提交commit