本地仓库创建
仓库,即版本库,英文为repository 。
只有在仓库中的目录和文件才可以被管理起来。
cd somedir
git init
这样就创建了一个仓库 , 此时目录下会有个.git的隐藏目录,其是用来管理追踪版本的。
向仓库中添加文件
在仓库中创建文件 。 此时文件状态是 未track的、unstaged的。
使用命令 git add 文件 来添加文件 。 此时文件状态是staged的。
使用命令 git commit -m “xxx” 来提交文件, -m后的内容是注释。
远程仓库关联
到目前为止, git提交的文件还只是在本地仓库, 要提交到远程仓库,需要关联远程仓库,如github 、gitlab、国内的码云。
1. 在远程仓库创建仓库。 https://github.com/coodajingang/gittest.git
2. 使用git remote命令关联远程仓库 , origin 是远程仓库的默认名称。
git remote add origin https://github.com/coodajingang/gittest.git
3. 使用git push命令将本地仓库内容推送到远程仓库 ,-u参数用来将本地master 与 origin master分支关联起来,后续使用方便。
git push -u origin master
在本地工作区修改文件后, 使用git commit 提交文件 ,此时更改只在本地仓库,还未同步到远程仓库, 需要 再用git push 来提交到远程仓库 。
直接从远程仓库clone
cd otherdir
git clone https://github.com/coodajingang/gittest.git
cd到本地空目录, 然后使用git clone , 这样会生成一个新的本地目录 。
文件各种状态
分支管理
- 查看当前的分支
PS E:\D\Program\git> git branch
* dev
master
- 切换分支
PS E:\D\Program\git> git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
- 创建分支
PS E:\D\Program\git> git branch dev2
后面使用 git checkout dev2 来切换分支。
创建并切换分支:
PS E:\D\Program\git> git checkout -b dev3
Switched to a new branch 'dev3'
- 分支提交到远程仓库
首先切换到相应的分支下, 然后使用 git push 提交 。
git push origin <branch-name> 向远程仓库提交branch-name分支。
若远程仓库的分支版本比本地新,则会报错,提示需要合并处理冲突。
使用 git pull origin <branch-name> 从远程仓库down分支,会触发自动merge的过程,有冲突则进行冲突解决,见下面。
在git pull时,可能会报错,因为远程分支没有与本地仓库分支进行映射,这时需要先进行映射 :
git branch --set-upstream-to=origin/<branch-name> localbranchname
或者
git branch --set-upstream branch-name origin/branch-name
.
建议在创建分支时就进行映射:
git checkout -b branch-name origin/branch-name
- 分支合并
使用merge 将一个分支合并到另外一个分支上 。
PS E:\D\Program\git> git merge dev2
Updating 356c452..57af054
Fast-forward
test2.txt | 1 +
1 file changed, 1 insertion(+)
PS E:\D\Program\git>
PS E:\D\Program\git> git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
PS E:\D\Program\git>
-
冲突解决
当merge时,可能会有分支冲突 , 这时需要手工进行解决 。 -
分支删除
git branch -d dev2 -
查询分支图形化
git log --graph --pretty=oneline --abbrev-commit -
stash
git stash 命令将当前未commit的工作暂时保存起来,从而可以切换到其他分支进行工作,这在需要紧急修复bug时, 而当前的工作未完成不想进行一次脏commit时特别有用。
使用git stash list 来查看当前stash的内容。
使用 git stash pop 或 apply 来装载暂存的内容继续工作。
命令
- 远程仓库 , git自动将本地的master 与 远程仓库的master对应起来, 远程仓库的默认名称为origin 。
查看远程仓库信息使用 git remote
PS E:\D\Program\git> git remote
origin
PS E:\D\Program\git> git remote -v
origin https://github.com/coodajingang/gittest.git (fetch)
origin https://github.com/coodajingang/gittest.git (push)
- rebase
在向远程仓库push代码时,会报错:
! [rejected] master -> master (fetch first)
error: failed to push some refs to 'https://github.com/coodajingang/gittest.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
因为在我们提交时, 远程仓库的版本发生了变化, 这时我们可以使用git pull 下载最新的版本进行合并操作,然后push , 但是此时会发现git log 显示的分支上不是一条直线, 这时可以使用 git rebase , 分支上版本提交的是一条直线。
git rebase ,即将本次新提交基于新的版本来提交,但有个前提就是没有文件冲突,有冲突时还要进行冲突解决 。
回退版本
本地仓库使用 :
git reset --hard HEAD^
其中HEAD^ 表示上一个版本, HEAD^^ 表示上上一个版本 ,也可以使用 HEAD~10 表示上10个版本。
然后进行远程回滚:
git push origin branch-name -f
-f 参数为强制提交 , 不加则会让本地进行合并。
gitignore
在本地创建.gitignore文件可以忽略文件或文件夹。
1、在.gitignore文件中还可以使用通配符,例如,*.log,去掉.gitignore同一文件夹中的所有后缀名为log的文件。GitHub上提供了一份常用的忽略规则,大家可以拿来参考,详见此处:https://gist.github.com/octocat/9257657。
2、如果.gitignore忽略规则创建于文件提交代码库之后,则.gitignore规则不会影响目前所提交的文件(不会自动把文件从服务器端删除掉)。你需要手动删除,用如下的方式:
git rm --cached <FILENAME>
<FILENAME>即你要移除的文件全名。
- git commit
- git push
则 本地和 服务器端仓库都会删除掉相应文件 。
网友评论