git指令

git 基本指令

git init

建立一个git仓库

git add

将工作区的内容添加到缓存区中

git commit -m '上传信息'

将缓存区的内容发布(本地服务器、远程服务器)

git status

查看当前git发布状态。
发生冲突时,也可以使用该命令查看哪个文件发生冲突

git branch

查看分支:git branch
创建分之:git branch 'name'
删除分支:git branch -d dev

git checkout

git checkout --filename # 撤销工作区的文件修改,自动回到上一次的状态
git checkout 'name' # 切换分支
git checkout -b 'new_name' # 创建并切换分支

git rm 'filename'

删除文件,与git add类似操作,一个添加到缓存区,一个删除

git log

$ git log
commit 1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master)
Author: Michael Liao 
Date:   Fri May 18 21:06:15 2018 +0800

    append GPL

commit e475afc93c209a690c39c13a46716e8fa000c366
Author: Michael Liao 
Date:   Fri May 18 21:03:36 2018 +0800

    add distributed

commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0
Author: Michael Liao 
Date:   Fri May 18 20:59:18 2018 +0800

简化log显示:

$ git log --pretty=oneline
1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master) append GPL
e475afc93c209a690c39c13a46716e8fa000c366 add distributed
eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0 wrote a readme file

#查看分支合并情况
git log --graph --pretty=oneline --abbrev-commit

# 查看分支合并图
git log --graph

git reset

首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交1094adb...(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。

$ git reset --hard HEAD^
HEAD is now at e475afc add distributed
$ git reset --hard 1094a  # 使用commit id 返回到指定版本
HEAD is now at 83b0afe append GPL

git reflog

现在,你回退到了某个版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本怎么办?找不到新版本的commit id怎么办?
在Git中,总是有后悔药可以吃的。当你用$ git reset --hard HEAD^回退到add distributed版本时,再想恢复到append GPL,就必须找到append GPL的commit id。Git提供了一个命令git reflog用来记录你的每一次命令:

$ git reflog
e475afc HEAD@{1}: reset: moving to HEAD^
1094adb (HEAD -> master) HEAD@{2}: commit: append GPL
e475afc HEAD@{3}: commit: add distributed
eaadf4e HEAD@{4}: commit (initial): wrote a readme file

git diff

提交后,用git diff HEAD -- readme.txt命令可以查看工作区和版本库里面最新版本的区别:

$ git diff HEAD -- readme.txt 
diff --git a/readme.txt b/readme.txt
index 76d770f..a9c5755 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,4 +1,4 @@
 Git is a distributed version control system.
 Git is free software distributed under the GPL.
 Git has a mutable index called stage.
-Git tracks changes.
+Git tracks changes of files.

git merge

git merge branch_name 将branch_name分支的内容合并到当前分支(master)。

git 远程仓库

使用github作为中央服务器
将ssh-key 添加到github中,保证是本人连接的服务器。
使用:

git remote add origin [email protected]:仓库的git地址 # 连接到远程仓库
git push 推送文件
git pull 拉下文件

团队开发示意图:


团队开发

通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。

$ git merge --no-ff -m "merge with no-ff" dev
Merge made by the 'recursive' strategy.
 readme.txt | 1 +
 1 file changed, 1 insertion(+)

git stash

可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作

先使用git stash隐藏当前工作现场
$ git stash
Saved working directory and index state WIP on dev: f52c633 add merge
首先确定要在哪个分支上修复bug,假定需要在master分支上修复,就从master创建临时分支:

$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 6 commits.
  (use "git push" to publish your local commits)

$ git checkout -b issue-101
Switched to a new branch 'issue-101'

修复完成后,切换到master分支,并完成合并,最后删除issue-101分支:

$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 6 commits.
  (use "git push" to publish your local commits)

$ git merge --no-ff -m "merged bug fix 101" issue-101
Merge made by the 'recursive' strategy.
 readme.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

使用 git stash list 查看最开始的工作现场
$ git stash list
stash@{0}: WIP on dev: f52c633 add merge

使用git stash pop回到刚开始的工作现场,恢复的同时把stash内容也删了
$ git stash pop
On branch dev
Changes to be committed:
  (use "git reset HEAD ..." to unstage)

    new file:   hello.py

Changes not staged for commit:
  (use "git add ..." to update what will be committed)
  (use "git checkout -- ..." to discard changes in working directory)

    modified:   readme.txt

Dropped refs/stash@{0} (5d677e2ee266f39ea296182fb2354265b91b3b2a)

git remote (远程仓库的默认名称是origin)

查看远程库的相关信息,git remote -v 查看更加详细的。

git push origin master(分支名也可以修改为dev)

推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上.

团队开发步骤:

因此,多人协作的工作模式通常是这样:
首先,可以试图用git push origin 推送自己的修改;
如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用git push origin 推送就能成功!
如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to  origin/。
这就是多人协作的工作模式,一旦熟悉了,就非常简单。

git rebase

rebase操作可以把本地未push的分叉提交历史整理成直线;
rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。

你可能感兴趣的:(git指令)