Introduction to Git

1. Basic info

Git用于文件的版本控制及协作开发。编辑文件后,使用git add filename把更新添加至暂存区,使用git commit -m "messages"提交暂存区的修改到本地git数据库。如果要同步至远程服务器,需要使用git push命令进行同步。

2. basic commands

  • git add,提交修改到暂存区
  • git commit,提交暂存区的修改,参数–amend是撤销上次的commit并重新提交。
  • git push origin master,将commit的修改同步至远程的master分支
  • git fetch origin master:temp,新建temp分支,并将远程的master同步至temp分支
  • git merge temp,将temp分支合并到当前分支
  • git pull origin dev,等同于git fetch+git merge
  • git branch new_name,创建新的branch但并不自动切换,git branch -d old_branch,删除不用的branch。
  • git checkout branch_name,切换到某分支去,切换分支前需要使当前分支干净,可以保存进度(stashing)或者修补提交(amending commit)。分支切换会改变目录中的文件,使得文件对应于当前分支的结构。
  • git checkout -b branch_name,新建branch并自动切换过去
  • git log -p,查看历次commit的信息记录。
  • git rm file.name,git mv old_name new_name,表示在add加入暂存区后,要删除某文件或重命名。

3. examples

a.新建git仓库

github上新建repo,本地git clone后,把已有的文件复制进去,并提交更新,同步至远程服务器,

b. 编辑并同步

1
2
3
4
git add file_name
git status # check whether all changes added.
git commit -m "comments"
git push -u origin master

c. 创建分支并切换合并

场景描述:master分支为安全稳定的代码,dev为正在开发的比较稳定的代码,test是测试状态的代码。假如正在test分支上工作,突然接到任务需要解决dev分支上的问题。那么流程是切换到dev分支,新建hotfix分支,编辑并测试好解决方案,切换回dev分支,合并分支并删除hotfix分支,然后切换到test分支继续工作,流程如下。

1
2
3
4
5
6
7
git checkout dev #切换至dev分支
git checkout -b hotfix # 新建并自动切换过去
# some edit and test work
git checkout dev
git merge hotfix # merge hotfix branch into dev branch
git branch -d hotfix # delete hotfix branch which is not needed
git checkout test # back to test branch to continue working

d. 合并远程到本地

在本地开发时,如果远程仓库内容有更新,需要合并到本地,假如要从远程的dev branch合并到本地的dev branch,流程如下:

1
2
3
git fetch origin dev:temp
git checkout dev
git merge temp

如果出现合并冲突,即不同的仓库对同一处进行了不同的修改,那么需要手动合并冲突。使用git status查看什么文件出现冲突,然后打开文件进行合并,在=====分隔符的上下选择一处进行合并,然后重新git add;git commit,即可。

e. 撤销更改

情景描述:程序写了一半发现改错了,需要回退到之前的一个版本。操作流程如下:

采用命令git reset --hard commit_id可以回退到相应ID的版本,采用命令git reflog查到未来的某一个ID后,重新采用git reset --hard commit_id就可以撤销回退,变为回退之前的版本。

4. others

分支的命名:master用于稳定安全的代码,dev表示正在开发的分支,next表示后续开发及测试,这些都是长期分支.

设置换行符为unix/windows,推荐如下:

1
2
# 提交时转换为LF,检出时不转换
git config --global core.autocrlf input

若文件已经是crlf格式,git windows自带了doc2unix程序,直接执行find . -type f -exec dos2unix {} +即可。