git

2018-09-05  本文已影响0人  金刚_30bf

本地仓库创建

仓库,即版本库,英文为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 , 这样会生成一个新的本地目录 。

文件各种状态

分支管理

  1. 查看当前的分支
PS E:\D\Program\git> git branch
* dev
  master
  1. 切换分支
PS E:\D\Program\git> git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
  1. 创建分支
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'
  1. 分支提交到远程仓库
    首先切换到相应的分支下, 然后使用 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

  1. 分支合并
    使用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>
  1. 冲突解决
    当merge时,可能会有分支冲突 , 这时需要手工进行解决 。

  2. 分支删除
    git branch -d dev2

  3. 查询分支图形化
    git log --graph --pretty=oneline --abbrev-commit

  4. stash
    git stash 命令将当前未commit的工作暂时保存起来,从而可以切换到其他分支进行工作,这在需要紧急修复bug时, 而当前的工作未完成不想进行一次脏commit时特别有用。

使用git stash list 来查看当前stash的内容。
使用 git stash pop 或 apply 来装载暂存的内容继续工作。

命令

  1. 远程仓库 , 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)
  1. 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>即你要移除的文件全名。

  1. git commit
  2. git push

则 本地和 服务器端仓库都会删除掉相应文件 。

上一篇下一篇

猜你喜欢

热点阅读