Git 常用操作记录

2018-09-30  本文已影响0人  zZ小菜鸟

https://backlog.com/git-tutorial/cn/intro/intro1_1.html
https://backlog.com/git-tutorial/cn/stepup/stepup1_1.html
https://backlog.com/git-tutorial/cn/reference/

简介

主要是解决平常开发过程中维护一个项目的版本更新状态和内容,通过git可以查看每个版本的改动情况,以及回退到以前的某个版本。git更加方便多人协同开发。

概念

所以在工作目錄上做的任何變更並不會直接提交到數據庫的。Git在執行提交的時候,不是直接將工作目錄的狀態儲存到數據庫,而是將索引的狀態儲存到數據庫。因此,要提交變更,首先必需要把變更內容加入到索引中。索引的存在可以排除工作目錄裡不必要的檔案提交,還可以只將檔案變更內容的一部分加入索引並提交。

origin/master
代表遠端數據庫「origin」的「master」分支位置。
origin/HEAD
代表遠端數據庫「origin」當前提交的位置。通常和「origin/master」的位置相同。
master
代表本地端數據庫的「master」分支位置。

Git執行合併可能會自動合併修改的部分。但是也可能有不能自動合併的時候

分支是为了将修改记录的整体流程分叉保存。分叉后的分支不受其他分支的影响,所以在同一个数据库里可以同时进行多个修改。
为了不受其他开发人员的影响,您可以在主分支上建立自己专用的分支。完成工作后,将自己分支上的修改合并到主分支。因为每一次提交的历史记录都会被保存,所以当发生问题时,定位和修改造成问题的提交就容易多了。

HEAD~: HEAD~才是回退的步数
HEAD^:主要是控制merge之后回退的方向

merge
保持修改内容的历史记录,但是历史记录会很复杂。
rebase
历史记录简单,是在原有提交的基础上将差异内容反映进去。
因此,可能导致原本的提交内容无法正常运行。

分支工作
主分支: master分支和develop分支.master
master分支只负责管理发布的状态。在提交时使用标签记录发布版本号。develop
develop分支是针对发布的日常开发分支。刚才我们已经讲解过有合并分支的功用。
特性分支: 这个分支是针对新功能的开发,在bug修正的时候从develop分支分叉出来的。基本上不需要共享特性分支的操作,所以不需要远端控制。完成开发后,把分支合并回develop分支后发布。
release分支:release分支是为release做准备的。通常会在分支名称的最前面加上release-。release前需要在这个分支进行最后的调整,而且为了下一版release开发用develop分支的上游分支。一般的开发是在develop分支上进行的,到了可以发布的状态时再创建release分支,为release做最后的bug修正。到了可以release的状态时,把release分支合并到master分支,并且在合并提交里添加release版本号的标签。要导入在release分支所作的修改,也要合并回develop分支。
hotFix分支:hotFix分支是在发布的产品需要紧急修正时,从master分支创建的分支。通常会在分支名称的最前面加上 hotfix-。

操作实例

新建git库: git init
添加跟踪: git add file
提交修改: git commit -m "information"
新建分支: git branch <branchname> || git branch -b <branchname>
查看分支: git branch
切换分支: git checkout <branchname>
合并分支:
git merge <commit> //当前分支为fixbug
git checkout master
git merge fixbug
删除分支: git branch -d <branchname>
合并分支2:
git rebase master
git add somefile
git rebase --continue //提交rebase的时候,修改冲突后的提交不是使用commit命令,而是执行rebase命令指定 --continue选项。若要取消rebase,指定 --abort选项。
git checkout master
git merge fixbug

远端仓库

标签

给HEAD指向的提交中添加标签
添加:git tag <tagname> || git tag -am "连猴子都懂的Git" banana
显示标签:git tag
查询历史记录中的标签提交: git log --decorate
删除标签:git tag -d <tagname>

修改提交

复原修改过的索引的状态(mixed)
彻底取消最近的提交(hard)
只取消提交(soft)

把弄错分支的提交移动到正确的地方
把其他分支的提交添加到现在的分支

在push之前,重新输入正确的提交注解
清楚地汇合内容含义相同的提交。
添加最近提交时漏掉的档案

汇合主题分支的提交,然后合并提交到目标分支。

操作实例

修改提交

git log 连猴子都懂的Git命令 add 把变更录入到索引中 commit 记录索引的状态 git add sample.txt
$ git commit --amend //修改了上一次的提交内容
https://backlog.com/git-tutorial/cn/stepup/stepup7_1.html

取消提交:git revert HEAD

删除提交

$ git log
连猴子都懂的Git命令
add 把变更录入到索引中
commit 记录索引的状态
pull 取得远端数据库的内容
git reset --hard HEAD~~ // 用reset删除提交。
git reset --hard ORIG_HEAD //还原到reset前的状态。

git cherry-pick 99daed2

若要汇合过去的提交,请用rebase -i。

git rebase -i HEAD~~

rebase修改提交:

git rebase -i HEAD~~ 连猴子都懂的Git命令 add 把变更录入到索引中 commit 记录索引的状态 pull 取得远端数据库的内容 git add sample.txt
git commit --amend git rebase --continue

merge --squash切换到master分支后,指定 --squash选项执行merge。

git checkout master Switched to branch 'master' git merge --squash issue1
Auto-merging sample.txt
CONFLICT (content): Merge conflict in sample.txt
Squash commit -- not updating HEAD
Automatic merge failed; fix conflicts and then commit the result.
git add sample.txt git commit
[master 0d744a7] Conflicts: sample.txt
1 files changed, 4 insertions(+), 0 deletions(-)

更多资料

https://git-scm.com/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-%E8%8E%B7%E5%8F%96-Git-%E4%BB%93%E5%BA%93

上一篇 下一篇

猜你喜欢

热点阅读