Please enable JavaScript.
Coggle requires JavaScript to display documents.
GIT (Chapter 3: branch (Nhanh Remote (Nhánh từ xa (remote) là các tham…
GIT
Chapter 3: branch
- commit >> tree >> blog
- branch >> commit ...
- create new branch: $ git branch testing
Tập tin HEAD đây là một con trỏ tới nhánh nội bộ mà bạn đang làm việc
$ git checkout testing (chuyen sang nhanh khac)
- Cơ Bản Về Phân Nhánh và Tích Hợp
$ git checkout -b issue-53
+
$ git checkout -b hotfix
Switched to a new branch "hotfix"
$ vim index.html
$ git commit -a -m 'fixed the broken email address'
+
$ git checkout master
$ git merge hotfix
$ git checkout master
$ git merge hotfix
+
Nếu bạn muốn đưa chúng(hotfix) vào, bạn có thể tích hợp nhánh master vào nhánh iss53 bằng cách chạy lệnh git merge master, hoặc bạn có thể chờ đợi đến khi bạn quyết định tích hợp nhánh iss53 ngược trở lại nhánh master về sau
Cơ Bản Về Tích Hợp
- Merge #53 vao Master
$ git checkout master
$ git merge issue-53
(Bởi vì commit trên nhánh mà bạn đang làm việc (master) không phải là "cha" trực tiếp của nhánh mà bạn đang tích hợp vào. Git phai lam them mot so viec. Trường hợp này, Git thực hiện một tích hợp 3-chiều, sử dụng hai snapshot được trỏ tới bởi các đầu mút của nhánh và "cha chung" của cả hai.
Thay vì việc chỉ di chuyển con trỏ về phía trước, Git tạo một snapshot mới - được hợp thành từ lần tích hợp 3-chiều này và cũng tự tạo một commit mới trỏ tới nó, Nó được biết tới như là "commit tích hợp" (merge commit) và nó đặc biệt vì có nhiều hơn một cha)
$ git branch -d iss53
- Mâu Thuẫn Khi Tích Hợp
- Nếu bạn thay đổi cùng một nội dung của cùng một tập tin ở hai nhánh khác nhau mà bạn đang muốn tích hợp vào, Git không thể tích hợp chúng một cách gọn gàng.
- $ git merge iss53
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.
- Git chưa tự tạo commit tích hợp mới. Nó tạm dừng quá trình này lại cho đến khi bạn giải quyết xong xung đột.
- Nếu bạn muốn xem tập tin nào chưa được tích hợp tại bất kỳ thời điểm nào sau khi xung đột xảy ra, bạn có thể sử dụng lệnh git status:
- Sau khi giải quyết xong tất cả các phần này trong các tập tin bị xung đột, chạy lệnh git add cho từng tập tin để đánh dấu là chúng đã được giải quyết. Tổ chức chúng cùng đồng nghĩa với việc đánh dấu là đã được giải quyết trong Git.
- Sau khi thoát khỏi chương trình hỗ trợ tích hợp, Git sẽ hỏi bạn nếu tích hợp thành công. Nếu bạn trả lời đúng, nó sẽ đánh dấu tập tin đó là đã giải quyết cho bạn.
$ git status
- Quan ly cac nhanh
$ git branch
$ git branch -v (last commit)
$ git branch --merged/--no-merged
- Quy trinh lam viec phan nhanh
- Nhanh lau doi
Ý tưởng ở đây là, các nhánh ở các tầng khác nhau của sự ổn định; khi chúng đạt tới một mức ổn định hơn nào đó, chúng sẽ được tích hợp vào tầng trên nó. Tóm lại, có nhiều nhánh tồn lại lâu dài không thật sự cần thiết, nhưng nó thường rất hữu ích, đặc biệt là khi bạn làm việc với các dự án lớn và phức tạp.
- Nhanh chu de
Nhánh chủ đề (topic branches) thì ngược lại, nó lại khá hữu ích cho các dự án ở bất kỳ cỡ nào.
Nhánh từ xa (remote) là các tham chiếu tới trạng thái của các nhánh trên kho chứa trung tâm của bạn. Chúng là các nhánh nội bộ mà bạn không thể di chuyển; chúng chỉ di chuyển một cách tự động mỗi khi bạn thực hiện bất kỳ giao tiếp nào qua mạng lưới. Nhánh remote hoạt động như là các bookmark (dấu) để nhắc nhở bạn các nhánh trên kho chứa trung tâm của bạn ở đâu vào lần cuối cùng bạn kết nối tới.
Đẩy Lên:
Khi bạn muốn chia sẻ một nhánh với mọi người, bạn cẩn phải đẩy nó lên một máy chủ mà bạn có quyền ghi trên đó. Nhánh nội bộ của bạn sẽ không tự động thực hiện quá trình đồng bộ hóa - mà bạn phải tự đẩy lên cách nhánh mà bạn muốn chia sẻ.
$ git push (remote) (branch
OR git push origin serverfix:serverfix
OR git push origin serverfix:awesomebranch (rename)
Để tích hợp công việc hiện tại vào nhánh bạn đang làm việc, bạn có thể chạy git merge origin/serverfix. Nếu bạn muốn nhánh serverfix riêng để có thể làm việc trên đó, bạn có thể tách nó ra khỏi nhánh trung tâm bằng cách:
$ git checkout -b serverfix origin/serverfix
Cách này sẽ tạo cho bạn một nhánh nội bộ mà bạn có thể làm việc, bắt đầu cùng một vị trí với origin/serverfix.
Theo doi cac nhanh
Check out một nhánh nội bộ từ một nhánh trung tâm tự động tạo ra một tracking branch. Tracking branches là các nhánh nội bộ có liên quan trực tiếp với một nhánh trung tâm. Nếu bạn đang ở trên một tracking branch và chạy git push, Git tự động biết nó sẽ phải đẩy lên nhánh nào, máy chủ nào. Ngoài ra, chạy git pull khi đang ở trên một trong những nhánh này sẽ truy xuất toàn bộ các tham chiếu từ xa và sau đó tự động tích hợp chúng với các nhánh từ xa tương ứng
- $git checkout -b [branch] [remotename]/[branch]
- $ git checkout --track origin/serverfix
- $ git checkout -b sf origin/serverfix
-
Chapter 2:
- Tạo kho chứa:
a. Tạo mới từ thư mục của mình:
$git init
$git add <wdyw>
$git commit -m <msg>
b. Sao chép kho chứa đã tồn tại
$git clone [url] [folder name]
tracked/untracked
- tracked: in snapshot and in [modified, unmodified, staged]
- untracked: not in snapshot or stage
*init: tracked & unmodified
(Commit >> Uncommited)
*No commit for untracked files
- Check status
$git status
- git add <file> => <file> is staged
- Control Modified Files
- modified files (not stage) => git add (multi func cmd) => staged
- <file-a>: in both staged and unstaged.=> !!! chỉ commit cái đã stage chứ không phải có trên Working Folder
- Bỏ qua các tập tin:
.gitignore
*.[oa] => .start with o or a
*~ => ignore file ending with ~
*: / => folder; ! => not
- View Staged and Unstaged: $git diff (list all change unstaged)
git diff --staged/cached (list all changes staged with the last committed)
- Commit Changes:
git config --global core.editor
them option (-v)
- Bỏ Qua Khu Vực Tổ Chức
- -a to git commit (bo qua git add, commit luon cac file tracked)
- Xoa tap tin
xoa khoi thu muc lam viec (track): git rm (luu y: xoa khoi stage, xoa de commit)
- Di Chuyển Tập Tin
git mv file_from file_to
.gitignore sample file:
a comment - dòng này được bỏ qua
không theo dõi tập tin có đuôi .a
*.anhưng theo dõi tập lib.a, mặc dù bạn đang bỏ qua tất cả tập tin .a ở trên
!lib.achỉ bỏ qua tập TODO ở thư mục gốc, chứ không phải ở các thư mục con subdir/TODO
/TODObỏ qua tất cả tập tin trong thư mục build/
build/bỏ qua doc/notes.txt, không phải doc/server/arch.txt
doc/*.txtbỏ qua tất cả tập .txt trong thư mục doc/
doc/*/.txt
2.3 Commit History
- $ git log
option: $ git log -p(diff) -2(line)
$ git log -U1(ngu canh 1 dong) --word-diff (xem van ban)
--stat
$ git log --pretty=format:"%h - %an, %ar : %s"
$ git log --pretty=format:"%h %s" --graph
$ git log --since=2.weeks (until
$ git log --pretty="%h - %s" --author=gitster --since="2008-10-01" \ --before="2008-11-01" --no-merges -- t/
2.4 Phuc Hoi
- Changing the last commit
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend
=> only 1 commit with new msg
- Remove the staged files
$git reset HEAD <file>...
- Restore the modified files
git checkout -- <file>..." to discard changes in working dir
5 Remote Working
- Display server: $ git remote
Bạn cũng có thể sử dụng tham số -v để hiển thị địa chỉ mà Git đã lưu tên rút gọn đó: $ git remote -v
$ git remote -v
- Them cac kho chua tu xa
$ git remote add [shortname] [url]
- Truy Cập Và Kéo Về Từ Máy Chủ Trung Tâm
$ git fetch [remote-name] (!= git pull; git clone auto create local branch)
- Đẩy Lên Máy Chủ Trung Tâm
$git push [tên-máy-chủ] [tên-nhánh]
- Kiểm Tra Một Máy Chủ Trung Tâm
$git remote show [tên-trung-tâm]
- Xóa Và Đổi Tên Từ Xa
$ git remote rename pb paul
$ git remote rm paul
Để xem bạn đã cấu hình tới máy chủ từ xa nào, bạn có thể chạy lệnh git remote. Nó sẽ liệt kê tên ngắn gọn của mỗi máy chủ từ xa bạn đã chỉ định. Nếu bạn sao chép nó từ một kho chứa có sẵn, ít nhất bạn sẽ thấy bản gốc (origin) - tên mặc định mà Git đặt cho phiên bản trên máy chủ mà bạn đã sao chép từ đó:
$ git remote
origin
$ git remote add pb git://github.com/paulboone/ticgit.git
$ git remote -v
origin git://github.com/schacon/ticgit.git
pb git://github.com/paulboone/ticgit.git
$ git remote show origin
- remote origin
URL: git@github.com:defunkt/github.git
Remote branch merged with 'git pull' while on branch issues
issues
Remote branch merged with 'git pull' while on branch master
master
New remote branches (next fetch will store in remotes/origin)
caching
Stale tracking branches (use 'git remote prune')
libwalker
walker2
Tracked remote branches
acl
apiv2
dashboard2
issues
master
postgres
Local branch pushed with 'git push'
master:master
- Tag
- Liệt Kê Tag: $ git tag [-l 'v1.4.2.*']
- Thêm Tag Mới [lightweight & annote]
a. Annotated Tags
$ git tag -a v1.4 -m 'my version 1.4'
$ git show [v1.4]
b. *Signed Tags: $ git tag -s v1.5 -m 'my signed 1.5 tag'
c. Lightweight Tags: $ git tag v1.4-lw
- Xác Thực Các Tag
git tag -v [tên-tag] (can co public key de lam viec nay)
- Tag Muộn (node tiep theo la vidu)
- Chia se Tag: Mặc định, lệnh git push không "truyền" (transfer) các tag lên máy chủ trung tâm. Ban phai chi dinh.
git push origin [tên-tag]. (all tags: )
$ git log --pretty=oneline
15027957951b64cf874c3557a0f3547bd83b3ff6 Merge branch 'experiment'
a6b4c97498bd301d84096da251c98a07c7723e65 beginning write support
0d52aaab4479697da7686c15f77a3d64d9165190 one more thing
6d52a271eda8725415634dd79daabbc4d9b6008e Merge branch 'experiment'
0b7434d86859cc7b8c3d5e1dddfed66ff742fcbc added a commit function
4682c3261057305bdd616e23b64b0857d832627b added a todo file
166ae0c4d3f420721acbb115cc33848dfcc2121a started write support
9fceb02d0ae598e95dc970b74767f19372d61af8 updated rakefile
964f16d36dfccde844893cac5b347e7b3d44abbc commit the todo
8a5cbc430f1a9c3d00faaeffd07798508422908a updated readme
$ git tag -a v1.2 -m 'version 1.2' 9fceb02
- Meo nho
a. auto completion
b. bi danh (alias) trong git
$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.ci commit
$ git config --global alias.st status
-
-
-